package Vending;

public class VendingMachine{
    static int machines=0;
    static final int MAXITEMS=100;
    private String product;
    private float totalCash;
    private int nSellItems;
    private String state;
    private Triple[] items;
    private int nItems;
    
    static private void incMachines(){
	machines++;
    }

    static public int getMachines(){
	return machines;
    }

    static int getMaxProd(){
	return MAXITEMS;
    }

    
    public VendingMachine(String p, Triple[] i, float cash){
	product=p;
	totalCash=cash;
	nSellItems=0;
	state="OK";
	items=i;
	nItems= (i.length<MAXITEMS)?i.length:MAXITEMS;
	incMachines();
    }

  
    private String stCash(){
	String valor=String.valueOf(totalCash) + "00";
	String v="";
	int i=valor.indexOf('.');
	return valor.substring(0,i+3);
    }
    public String toString(){
	String result= "VENDING MACHINE\n";
	
	result += "PRODUCT: " + product + "\n"; 
	result += "STATE: " + state +"\n"; 
	result += "CASH: " + stCash() + "\n";
	String allItems="";
	for (int i=0;i<nItems;i++)
	    allItems += items[i] + " ";
 
	result += "ITEMS: " + allItems + "\n"; 
	result += "NUMBER OF SELLED ITEMS: " + nSellItems + "\n"; 
	return result;

    }

    public boolean goodState(String st){
	//possible states
	st=st.toUpperCase();
	return st.equals("OK") || st.equals("AV")|| st.equals("SP")|| st.equals("SD");
    }

    public boolean setState(String st){
	if (goodState(st)){
	    state=st.toUpperCase();
	    return true;}
	else
	    return false;
    }
	
	    
    private int findProd(String nome){
	int i=0;
	boolean found=false;

	while (i<nItems){
	    found = items[i].getId().equals(nome);
	    if (!found)
		i++;
	    else
		return i;
	}
	
	return -1;
    }

    private boolean canSell(String p){
	int i=findProd(p);
	return (i!=-1 && items[i].getQuantity()>0 && state.equals("OK"));
    }

    public void sell(String p){
	if (canSell(p)){
	    int i=findProd(p);
	    items[i].setQuantity(items[i].getQuantity() -1);
	    nSellItems++;
	    totalCash += items[i].getPrice();
	}
	else
	    System.out.println("Impossible operation");
    }


    public boolean loadProd(String s, int q){
	int i=findProd(s);
	if (i!=-1 && q>0){
	    items[i].setQuantity(items[i].getQuantity()+q);
	    return true;
	}
	else
	    return false;
    }
    public boolean  insertProd(Triple t){
	if ( nItems+1<MAXITEMS && findProd(t.getId())==-1){
	    Triple[] novosItems=new Triple[nItems+1];
	    for(int i=0;i<nItems;i++)
		novosItems[i]=items[i];
	    novosItems[nItems++]=t;
	    items=novosItems;
	    return true;
	}
	else
	    return false;
    }	    
    
}
