import java.awt.*;
import java.awt.event.*;

public class LottoMadness extends java.applet.Applet
    implements ItemListener, ActionListener,
    Runnable {

    Thread playing;

    // set up row 1
    Panel row1 = new Panel();
    CheckboxGroup option = new CheckboxGroup();
    Checkbox quickpick = new Checkbox("Quick Pick", option, false);
    Checkbox personal = new Checkbox("Personal",option, true);
    // set up row 2
    Panel row2 = new Panel();
    Label numbersLabel = new Label("Your picks: ", Label.RIGHT);
    TextField[] numbers = new TextField[6];
    Label winnersLabel = new Label("Winners: ", Label.RIGHT);
    TextField[] winners = new TextField[6];
    // set up row 3
    Panel row3 = new Panel();
    Button stop = new Button("Stop");
    Button play = new Button("Play");
    Button reset = new Button("Reset");
    // set up row 4
    Panel row4 = new Panel();
    Label got3Label = new Label("3 of 6: ", Label.RIGHT);
    TextField got3 = new TextField();
    Label got4Label = new Label("4 of 6: ", Label.RIGHT);
    TextField got4 = new TextField();
    Label got5Label = new Label("5 of 6: ", Label.RIGHT);
    TextField got5 = new TextField();
    Label got6Label = new Label("6 of 6: ", Label.RIGHT);
    TextField got6 = new TextField(10);
    Label drawingsLabel = new Label("Drawings: ", Label.RIGHT);
    TextField drawings = new TextField();
    Label yearsLabel = new Label("Years: ", Label.RIGHT);
    TextField years = new TextField();

    public void init() {
        setBackground(Color.lightGray);
        GridLayout appletLayout = new GridLayout(5, 1, 10, 10);
        setLayout(appletLayout);

        // Add listeners
        quickpick.addItemListener(this);
        personal.addItemListener(this);
        stop.addActionListener(this);
        play.addActionListener(this);
        reset.addActionListener(this);

        FlowLayout layout1 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row1.setLayout(layout1);
        row1.add(quickpick);
        row1.add(personal);
        add(row1);

        GridLayout layout2 = new GridLayout(2, 7, 10, 10);
        row2.setLayout(layout2);
        row2.setLayout(layout2);
        row2.add(numbersLabel);
        for (int i = 0; i < 6; i++) {
            numbers[i] = new TextField();
            row2.add(numbers[i]);
        }
        row2.add(winnersLabel);
        for (int i = 0; i < 6; i++) {
            winners[i] = new TextField();
            winners[i].setEditable(false);
            row2.add(winners[i]);
        }
        add(row2);

        FlowLayout layout3 = new FlowLayout(FlowLayout.CENTER, 10, 10);
        row3.setLayout(layout3);
        stop.setEnabled(false);
        row3.add(stop);
        row3.add(play);
        row3.add(reset);
        add(row3);

        GridLayout layout4 = new GridLayout(2, 3, 20, 10);
        row4.setLayout(layout4);
        row4.add(got3Label);
        got3.setEditable(false);
        row4.add(got3);
        row4.add(got4Label);
        got4.setEditable(false);
        row4.add(got4);
        row4.add(got5Label);
        got5.setEditable(false);
        row4.add(got5);
        row4.add(got6Label);
        got6.setEditable(false);
        row4.add(got6);
        row4.add(drawingsLabel);
        drawings.setEditable(false);
        row4.add(drawings);
        row4.add(yearsLabel);
        years.setEditable(false);
        row4.add(years);
        add(row4);
    }

    public void actionPerformed(ActionEvent event) {
        String command = event.getActionCommand();
        if (command == "Reset")
            clearAllFields();
        if (command == "Play") {
            playing = new Thread(this);
            playing.start();
            play.setEnabled(false);
            stop.setEnabled(true);
            reset.setEnabled(false);
            quickpick.setEnabled(false);
            personal.setEnabled(false);
        }
        if (command == "Stop") {
            playing.stop();
            stop.setEnabled(false);
            play.setEnabled(true);
            reset.setEnabled(true);
            quickpick.setEnabled(true);
            personal.setEnabled(true);
        }

    }

    public void itemStateChanged(ItemEvent event) {
        String command = (String) event.getItem();
        if (command == "Quick Pick") {
            for (int i = 0; i < 6; i++) {
                int pick;
                do {
                    pick = (int)Math.floor(Math.random() * 50 + 1);
                } while (numberGone(pick, numbers, i));
                numbers[i].setText("" + pick);
            }
        } else {
            for (int i = 0; i < 6; i++)
                numbers[i].setText(null);
        }
    }

    void clearAllFields() {
        for (int i = 0; i < 6; i++) {
            numbers[i].setText(null);
            winners[i].setText(null);
        }
        got3.setText(null);
        got4.setText(null);
        got5.setText(null);
        got6.setText(null);
        drawings.setText(null);
        years.setText(null);
    }

    void addOneToField(TextField field) {
        int num = Integer.parseInt("0" + field.getText());
        num++;
        field.setText("" + num);
    }

    boolean numberGone(int num, TextField[] pastNums, int count) {
        for (int i = 0; i < count; i++)
            if (Integer.parseInt(pastNums[i].getText()) == num)
                return true;
        return false;
    }

    boolean matchedOne(TextField win, TextField[] allPicks) {
        for (int i = 0; i < 6; i++) {
            String winText = win.getText();
            if ( winText.equals( allPicks[i].getText() ) )
                return true;
        }
        return false;
    }

    public void run() {
        while (true) {
            addOneToField(drawings);
            int draw = Integer.parseInt(drawings.getText());
            float numYears = (float)draw / 104;
            years.setText("" + numYears);

            int matches = 0;
            for (int i = 0; i < 6; i++) {
                int ball;
                do {
                    ball = (int)Math.floor(Math.random() * 50 + 1);
                } while (numberGone(ball, winners, i));
                winners[i].setText("" + ball);
                if (matchedOne(winners[i], numbers))
                    matches++;
            }
            switch (matches) {
                case 3:
                    addOneToField(got3);
                    break;
                case 4:
                    addOneToField(got4);
                    break;
                case 5:
                    addOneToField(got5);
                    break;
                case 6:
                    addOneToField(got6);
                    stop.setEnabled(false);
                    play.setEnabled(true);
                    playing.stop();
            }
        }
    }
}
