/**
 * 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  Mark Koskinen
 * @version 1.0, Date: September 15, 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;
		 double total;
       
       total = total(prices, categories, 1);
		 tax = StateTaxes.foodTax(total); 

       return tax;    
    }
    /**
     * 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;
       
       total = total(prices, categories, 0);
		 tax = StateTaxes.salesTax(total); 

       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 tax;
		 double total;
       
       total = total(prices, categories, 2);
		 tax = LocalTaxes.preparedFoodTax(total); 

       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.00;

		 for(int i = 0; i < categories.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;
       
       result = false;
		 
		 if (category >= 0 && category <= 2) result = true;
       
       return result;       
    }
    
}
