/**
 * 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  Jonn Callahan
 * @version 1.0 9/14/08
 */
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;
       tax = 0.0;
       
       for(int x=0; x<categories.length; x++)
       {
          if(categories[x]==1)
            tax+=StateTaxes.foodTax(prices[x]);
          else
          	tax+=0.0;
       }   
    
       return tax;       
    }//end method


    /**
     * 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;     
       tax = 0.0;
       
	   for(int x=0; x<categories.length; x++)
	   {
	   	  if(categories[x]==0)
	   	  	tax+=StateTaxes.salesTax(prices[x]);
	   	  else
	   	  	tax+=0.0;
	   }

       return tax;       
    }//end method
    


    /**
     * 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 tax;
       tax = 0.0;
       
       for (int x=0; x<categories.length; x++)
       {
	      if(categories[x]==2)
	   	     tax+=LocalTaxes.preparedFoodTax(prices[x]);
	      else
	   	     tax+=0.0;
       }//end for
       
       return tax;       
    }//end method



    /**
     * 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.00;
       
       if(categoryToInclude==0)
       {
          for(int x=0; x<categories.length; x++)
          	if(categories[x]==0)
               total+=prices[x];
       }//end if
       if (categoryToInclude==1)
       {
       	  for(int x=0; x<categories.length; x++)
          	if(categories[x]==1)
               total+=prices[x];
       }//end if
       if (categoryToInclude==2)
       {
          for(int x=0; x<categories.length; x++)
          	if(categories[x]==2)
               total+=prices[x];
       }//end if
          
       return total;       
    }//end method
    
    
    /**
     * Determine 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<=2)
          result = true;
       else
          result = false;
       
       return result;       
    }//end method
}//end class
