package conteggi;

import conteggi.*;

public class Counter implements Contatore{
	/* costanti */
	public static final String READY="Ready";
	public static final String INFBOUNDERROR="Errore: limite inf. raggiunto";
	public static final String SUPBOUNDERROR="Errore: limite sup. raggiunto";

	/* var di classe */
	private static int numIstanze=0;

	/* var istanza */
	private int val;
	private String name;
	private String status;

	/* costruttori */
	public Counter(String s){
		name=s;
		reset();
		incNumIstanze();
		//System.out.println("Costr.1 di " + name + ". this= " + this);
	}

	public Counter(String s, int v){
		name=s;
		val=v;
		incNumIstanze();
		setStatus(READY);
		//System.out.println("Costr.2 di " + name + "; this= " + this);
	}
	
	/* metodi di classe */
	protected static int getNumIstanze(){
		return numIstanze;
	}

	private static final void incNumIstanze(){
		numIstanze++;
	}

	/* metodi d'istanza */
	private final void setStatus(String newstatus){
		status=newstatus;
	}

	protected String getStatus(){
		return status;
	}

	public void inc(){
		if (val<TOPVAL) {
			val++;
			setStatus(READY);
		}
		else setStatus(SUPBOUNDERROR);
	}

	public void dec(){
		if (val>0) {
			val--;
			setStatus(READY);
		}
		else setStatus(INFBOUNDERROR);
	}

	public int getValue(){
		return val;
	}

	public void reset(){
		val=0;
		setStatus(READY);
	}

	public void simpleShow(){
		System.out.println("Counter	" + getName());
		System.out.println("  Value:	" + getValue());
		System.out.println("  Status:	" + getStatus());
	}

	public String getName(){
		return name;
	}
}

