package lotto;

import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import javax.swing.*;
import java.net.*;
import edu.csusb.danby.applet.*;  //for DFrame, DApplet
import edu.csusb.danby.stat.*; //for HistogramPanel


/**
* class LottoApplet simulates the Hypergeometric distribution
* @author Charles Stanton
* @version Mon Jul 29 08:39:40 PDT 2002
*/
public class LottoApplet extends DApplet implements DControlPanelAction {
    HistogramPanel histogramPanel;
    LottoModel lottoModel;
    LottoBoard lottoBoard;
    JMenuBar menubar;
    DMenu fileMenu, choiceMenu, sizeMenu, repetitionMenu;
    int n_repetitions=1;

    /**
    * init method for applet
    */
    public void init(){

        lottoModel = new LottoModel();
        lottoBoard = new LottoBoard(lottoModel);
        histogramPanel = new HistogramPanel(lottoModel);
        histogramPanel.setDrawContinuous(false);
        String[] fileMenuItems={"exit"};
        String[] choiceMenuItems={"1","4","6", "8"};
        String[] sizeMenuItems ={"12","20","49","51"};
        String[] repMenuItems = {"1", "5", "20", "100"};

        String[] buttonName = {"play","reset"};
        DControlPanel controlPanel;
        
        menubar=new JMenuBar();
        

        
        fileMenu = new DMenu(this, "file", fileMenuItems );
        menubar.add(fileMenu);
        
        choiceMenu = new DMenu(this, "k winners", choiceMenuItems, true);
        choiceMenu.getItem(1).setSelected(true);
        lottoModel.setk(4);
        menubar.add(choiceMenu);

        sizeMenu = new DMenu(this, "N squares", sizeMenuItems, true);
        sizeMenu.getItem(0).setSelected(true);
        lottoModel.setN(12);
        menubar.add(sizeMenu);
        
        repetitionMenu = new DMenu(this,"n repetitions", repMenuItems, true);
        repetitionMenu.getItem(0).setSelected(true);
        n_repetitions=1;
        menubar.add(repetitionMenu);
        dFrame = new DFrame("Lotto Demo", lottoBoard , histogramPanel);
        dFrame.setJMenuBar(menubar);
        controlPanel = new DControlPanel(dFrame, this, buttonName);
        dFrame.pack();
        dFrame.validate();
        setVisible(true);
  }

    /**
    * menuAction method for DMenu
    * 
    * @param menuLabel the label for the activated menu
    * @param menuItemLabel the label for the activated item
    */
    public void menuAction( String menuLabel, String itemLabel){
        if (menuLabel.equals("file")){
            if (itemLabel.equals("exit")){
                dFrame.dispose();
            }
        }
        else if (menuLabel.equals("k winners")){
            lottoModel.setk(Integer.parseInt(itemLabel));
        }
        else if (menuLabel.equals("n repetitions")){
            n_repetitions = Integer.parseInt(itemLabel);
        }
        else if (menuLabel.equals("N squares")){
            lottoModel.setN(Integer.parseInt(itemLabel));
            lottoBoard.updateLottoBoard(lottoModel);
            lottoBoard.repaint();
        }
    }

    
    /**
    * implements controlPanelButtonAction method for DControlPanel
    * @param e the ActionEvent of the button pushed
    */
    public void doControlPanelButtonAction( ActionEvent e){
        String buttonLabel = e.getActionCommand();
        if (buttonLabel.equals("play")){
            //applet is uninteresting if no numbers are chosen
            if (lottoModel.getr()==0){
                String msg = "To win, you must choose some numbers.\n Click on numbers to choose.";
                String errTitle ="No numbers chosen";
                JOptionPane.showMessageDialog(dFrame, msg , errTitle,
                    JOptionPane.ERROR_MESSAGE);
            }
            else{
                lottoModel.play(n_repetitions);
                lottoBoard.updateLottoBoard(lottoModel);
                lottoBoard.repaint();
                histogramPanel.update(lottoModel);	
            }
        }
        else if (buttonLabel.equals("reset")){
            lottoModel.resetModel();
            lottoBoard.updateLottoBoard(lottoModel);
            lottoBoard.repaint();
            histogramPanel.update(lottoModel);
        }
    }

    /**
    * provides applet info
    */
     public String getAppletInfo() {
        return "An demonstration of the hypergeometric distribution.\nAuthor: Charles S. Stanton";
    }

}
