/**
 * 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       Kevin Bojarski
 * @version      1.0   09/16/2008
 */
    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 = 0;
      //loops the arrays and calculates the taxes for
      //items in the category 
         for(int i=0; i<prices.length; i++)
         {
            if (categories[i] == FOOD)
            {
               tax = tax + StateTaxes.foodTax(prices[i]);
            }//end if
         }//end for
      //if the food exemption is more than the tax
      //it is set to 0		
         if (tax <=0)
         {
            tax = 0;
         }//end if
      
         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 = 0;
      //loops the arrays and calculates the taxes for
      //items in the category       
         for(int i=0; i<prices.length; i++)
         {
            if (categories[i] == NON_FOOD)
            {
               tax = tax + StateTaxes.salesTax(prices[i]);
            }       
         }//end for
      //if the food exemption is more than the tax
      //it is set to 0		
         if (tax <=0)
         {
            tax = 0;
         }//end if
       
         return tax;       
      }//end nonfoodTax()
    
   
   
    /**
     * 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 = 0;
       //loops the arrays and calculates the taxes for
      //items in the category      
         for(int i=0; i<prices.length; i++)
         {
            if (categories[i] == PREPARED_FOOD)
            {    
               tax = tax + LocalTaxes.preparedFoodTax(prices[i]);
            }//end if
         }//end for
      	
      //if the food exemption is more than the tax
      //it is set to 0		
         if (tax <=0)
         {
            tax = 0;
         }//end if
         return tax;       
      }//end preparedfoodTax()
   
   
   
    /**
     * 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 = 0;
      //loops through the array to calculate the 
      //total of all items       
         for(int i=0; i<prices.length; i++)
         {
            if(categories[i] == categoryToInclude)
            {
               total = total + prices[i];
            }//end if
         }//end for
         return total;       
      }//end total()
    
    
    /**
     * Determines 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;
         }//end if
         else
         {
            result = false;
         }//end else   
         return result;       
      }//end isValid()
    
    
   }//end class
