/**
 * CSC 120 Final Exam Review Problems 2 and 3
 * 
 * Description:
 * Prob. 2: Declare, instantiate, and use individual Product objects.
 * Prob. 3: Declare, instantiate, fill, and use an array of Product objects.
*/

import java.awt.*;
import javax.swing.*;

public class MUPanel extends JPanel {
    
    // 2. a. Declare three Product variables called one, two, three
    private Product one, two, three;

    // 3. a. Declare an array of Product objects called arrayOfProducts
    private Product[] arrayOfProducts;
    
    public MUPanel() {
        setLayout(null);
        setPreferredSize(new Dimension(600, 400));
        setName("CSC 120 Final Exam Practice");
        setBackground(Color.ORANGE);

        // 2. b. Instantiate one using the 5-parameter constructor
        one = new Product(15, "Wallace and Gromit", true, 25.10, Color.CYAN);

        // 2. c. Instantiate two using the 1-parameter constructor
        two = new Product("XPod");

        // 2. d. Instantiate three using the no-parameter constructor
        three = new Product();

        // 2. e. Change the name of three to "Keychain"
        three.setName("Keychain");

        // 3. b. Instantiate the array with room for 5 Product objects
        arrayOfProducts = new Product[5];

        // 3. c. One at a time without using a loop
        //       instantiate Product objects and put them in the array.
        arrayOfProducts[0] = new Product(10, "Slumdog Millionaire", true, 22.95, Color.MAGENTA);
        arrayOfProducts[1] = new Product(15, "No Country for Old Men", true, 21.30, Color.GREEN);
        arrayOfProducts[2] = new Product(20, "A Beautiful Mind", false, 19.95, Color.RED);
        arrayOfProducts[3] = new Product(25, "Gladiator", true, 15.27, Color.YELLOW);
        arrayOfProducts[4] = new Product(30, "Schindler's List", true, 23.42, Color.BLUE);

        // 3. d. Write code that uses a loop to call the getName method for
        //       each product in the array and displays the names of all
        //       products on the Java Console.
        for (Integer i = 0; i < arrayOfProducts.length; i++) {
            System.out.println(arrayOfProducts[i].getName());
        } 

        // 3. e. Write code that uses a loop to determine whether or not
        //       any product in the array is RED. If you find at least
        //       one red product, then display on the Java Console "Found"
        //       and otherwise display "Not found."

        // 3. e. Version 1:
        Integer numReds = 0;
        for (Integer i = 0; i < arrayOfProducts.length; i++) {
            if (arrayOfProducts[i].getProductColor().equals(Color.RED)) {
                numReds = numReds + 1;
            } // end if
        } // end for
        if (numReds > 0) {
            System.out.println("Found");
        }
        else {
            System.out.println("Not found");
        }

        // 3. e. Version 2:
        // Initialize the boolean named found to false,
        // then only change it when you find reds.
        // If you don't find any reds, then it
        // will still be false.
        // If you find 1 or more reds, then it
        // will have changed to true.
        Boolean found = false;
        for (Integer i = 0; i < arrayOfProducts.length; i++) {
            if (arrayOfProducts[i].getProductColor().equals(Color.RED)) {
                found = true;
            } // end if
        } // end for
        if (found) {
            System.out.println("Found");
        }
        else {
            System.out.println("Not found");
        }

        // 3. g. Write one line of code that calls the getAveragePrice
        //       method.
        System.out.println("The average price is " + getAveragePrice());

    } // end of constructor method


    public void paintComponents(Graphics g) {
        super.paintComponent(g);

        // 2. f. call the draw method for one, two, three
        one.draw(g);
        two.draw(g);
        three.draw(g);

    } // end of paintComponent();

    
    // 3. f. Write a method called getAveragePrice
    public Double getAveragePrice() {

        Double total = 0.0;
        Double average;
        for (Integer i = 0; i < arrayOfProducts.length; i++) {
            total = total + arrayOfProducts[i].getPrice();
        }

        average = total / arrayOfProducts.length;
        return average;

    } // end of getAveragePrice()

    
    /***********************************************
     * Do NOT change or delete anything below here!
     ***********************************************/
    public void frame() {
        for (Component c: getComponents())
            c.setSize(c.getPreferredSize());
        JFrame f = new JFrame(getName());
        f.setContentPane(this);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        f.pack();
        f.setVisible(true);    
    }

    public static void main(String args[]){new MUPanel().frame();}

} // end of class MUPanel