/**
 * A utility class that can be used to calculate sales
 * taxes on a collection of items
 *
 *
 * This work complies with the JMU Honor Code.
 *
 * @author  Travis Tucker
 * @version 1.0
 */
public class TaxCalculator
{
    public static int NON_FOOD        = 0;
    public static int FOOD            = 1;
    public static int PREPARED_FOOD   = 2;
    
	
	 

    /**
     * Calculate the tax on the (non-prepared) food items
     *
     * @param prices      The prices of all items purchases
     * @param categories  The corresponding categories of all items purchases
     * @return            The tax
     */
    public static double foodTax(double[] prices, int[] categories)
    {
       double tax;
		 double total;
       
		 total=0;
		 tax=0;
		 
		 for(int i=0; i < prices.length; i++ )
		 {
		 	
			if(categories[i]== FOOD)
			 total+= prices[i];
			 
       }//end for

       if(total > 0)
		  	tax = total * .03;
		 
		 else
         tax = 0;
			
       return tax;
		        
    }// end foodTax()


    /**
     * Calculate the tax on the non-food items
     *
     * @param prices      The prices of all items purchases
     * @param categories  The corresponding categories of all items purchases
     * @return            The tax
     */
    public static double nonfoodTax(double[] prices, int[] categories)
    {
       double tax;
       double total;
		 
		 StateTaxes state = new StateTaxes();

		 total = 0;
		 tax = 0;
		 for(int i = 0; i < prices.length; i++)
		 {
		 	if(categories[i]==NON_FOOD)
		  		total+= prices[i];
		 } 
		 if (total > .05)
         tax = state.salesTax(total);    
		 else      
			tax = 0;
       


       return tax;       
    }
    


    /**
     * Calculate the tax on the prepared food items
     *
     * @param prices      The prices of all items purchases
     * @param categories  The corresponding categories of all items purchases
     * @return            The tax
     */
    public static double preparedfoodTax(double[] prices, int[] categories)
    {
 		 double surcharge;  
	    double tax;
		 double total;
		 
		 LocalTaxes local = new LocalTaxes();
		 
		 total = 0;
		 tax = 0;
		 
		 for(int i = 0; i < prices.length; i++)
		 {
		 	if(categories[i]==PREPARED_FOOD)
    	     total += prices[i];
       }
		     
		   surcharge = local.preparedFoodSurcharge(total);
   
	    if(total > .05)
		   tax = total * .05 + surcharge;
	    else
		   tax = surcharge;     
		       
       return tax;       
    }



    /**
     * Calculate the total value of all items purchased in
     * particular category
     *
     * @param prices      The prices of all items purchases
     * @param categories  The corresponding categories of all items purchases
     * @param categoryToInclude  The category of interest
     * @return            The total value of items in the given category
     */
    public static double total(double[] prices, int[] categories, 
                                int categoryToInclude)
    {
       double     total;
		 
		 total = 0;
       
       for(int i = 0; i < prices.length; i++)
		 	if(categories[i] ==categoryToInclude)  
			  total=prices[i];
       

       return total;       
    }
    
    
    /**
     * Determin if the given category is valid
     *
     * @param category   The category of interest
     * @return           true if the category is valid; false otherwise
     */
    public static boolean isValid(int category)
    {
       boolean     result;
       if (category == 0 ||category == 1 || category == 2)
		   result=true;
		 else
         result = false;
       
       return result;       
    }
    
}
