
/**
 * Write a description of class Produtos here.
 * 
 * @author DCC + PRH 
 * @version v1 de 2006.04.15
 */
public class Produtos
{
	// instance variables 
	private Produto[] Prods;
    private int TotProds, MaxProds;
    
	/**
	 * Constructor for objects of class Produtos
	 */
	public Produtos(int capacid)
	{
		// initialise instance variables
		this.TotProds = 0;
		this.MaxProds = capacid;
		this.Prods = new Produto[this.MaxProds];		
	}
	
	/**
	 * Insere 1 novo Produto no conjunto de Produtos em Sotck na Empresa 
	 * 
	 * @param  r   referencia do produto
	 * @param  d   descricao
	 * @param  t   tipo que indica o modelo do produto (>=1)
	 * @return     nada 
	 */
	// Insert one more Product	
	public void insProd(String r, String d, int t)
	{
		if (this.TotProds < this.MaxProds)
		{
		   this.Prods[this.TotProds] = new Produto(r); 
		   this.Prods[this.TotProds].setDesc(d);		   
		   this.Prods[this.TotProds].setTipo(t);
		   
		   this.TotProds++;
		  }
		else
		{
		   System.out.println("ERRO: nao e possivel inserir mais Produtos!");   
		}
	}

	/**
	 * Procura um Produto com REFerencia dada 
	 * 
	 * @param  r   referencia do produto
	 * @return     Produto 
	 */	
	public Produto getProd(String r)
	{
	    int n = 0, t;
        Modelo mod;
        Produto este = null;	    
        
		while ((n < this.TotProds)&&(!(this.Prods[n].getRef()).equals(r))) { n++; }
		if (n < this.TotProds)	
	    {
		   este = this.Prods[n];		
      	}
		else
		{
		   System.out.println("ERRO: nao e possivel devolver esse Produto (Ref não existente)!");   
	    }
	   return este;
	}		

	/**
	 * Imprime todos os Atributos do Produto N  
	 * 
	 * @param  M   coleccao de modelos da empresa
	 * @param  n   num. de ordem do produto (indice ou posicao no stock)
	 * @return     nada 
	 */	
	// Print all the Attributes	of Product N (in the N-1 position) 
	public void listProd(Modelos M, int n)
	{
	    Modelo mod;
	    int t;
	       
	    if ((n >= 0)&&(n < this.TotProds))
	    {
		   this.Prods[n].mostraProd();
		   t = this.Prods[n].getTipo();
		   mod = M.getMod(t-1);	mod.mostraModelo();
     	}
		else
		{
		   System.out.println("ERRO: nao e possivel listar esse Produto (N excedo o total)!");   
	    }
	}
	
	/**
	 * Imprime todos os Atributos do Produto com REFerencia dada   
	 * 
	 * @param  M   coleccao de modelos da empresa
	 * @param  r   referencia do produto 
	 * @return     nada 
	 */	
	// Print all the Attributes	of Product with reference REF 
	public void listProd(Modelos M, String r)
	{
	    int n = 0, t;
        Modelo mod;   
        
		while ((n < this.TotProds)&&(!(this.Prods[n].getRef()).equals(r))) { n++; }
		if (n < this.TotProds)	
	    {
		   this.Prods[n].mostraProd();		
		   t = this.Prods[n].getTipo();
		   mod = M.getMod(t-1);	mod.mostraModelo();		   
     	}
		else
		{
		   System.out.println("ERRO: nao e possivel listar esse Produto (Ref não existente)!");   
	    }
	}	
	
	/**
	 * Lista os Atributos de todos os Produtos em Stock 
	 * 
	 * @param  M   coleccao de modelos da empresa
	 * @return     nada 
	 */		
	// Print all the Attributes	of all Products
	public void listProds(Modelos M)
	{
        Modelo mod;
        int t;	 
        
		for (int n =0; n < TotProds; n++)
	    {
		   Prods[n].mostraProd();
		   t = this.Prods[n].getTipo();
		   mod = M.getMod(t-1);	
		   mod.mostraModelo();	
   		   System.out.println("----------------------------------");
     	}
	}	
}
