import SquarePuzzle;
import SquarePuzzleDisplay;
import javax.swing.*;
import java.awt.event.*;
import java.awt.*;

public class SquarePuzzleApp extends ActionFrame {

    SquarePuzzle puzz;
    SquarePuzzleDisplay disp;
    JMenuBar theBar;
    JMenu theMenu;
    JMenuItem scrambleMI, orderMI, quitMI;

    private JMenuItem newMenuItem(String s) {
        JMenuItem item;
        item = new JMenuItem(s);
        item.addActionListener(this);
        theMenu.add(item);
        return item;
    }

    public SquarePuzzleApp(int i, int j){
        puzz = new SquarePuzzle(i,j);
        disp = new SquarePuzzleDisplay(puzz);
        theBar = new JMenuBar();
        theMenu = new JMenu("Options");
        scrambleMI = newMenuItem("Scramble");
        orderMI = newMenuItem("Order");
        quitMI = newMenuItem("Quit");
        theBar.add(theMenu);
        setJMenuBar(theBar);
        getContentPane().add(disp);
        addWindowListener(new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                    System.exit(0);
                }
            });
        pack();
        setVisible(true);
    }

    public void addActionListener(ActionListener listener) {
        disp.addActionListener(listener);
        scrambleMI.addActionListener(listener);
        orderMI.addActionListener(listener);
        quitMI.addActionListener(listener);
    }

    public void actionPerformed(ActionEvent e) {
        JMenuItem source = (JMenuItem)(e.getSource());
        if (source.getText().equals("Scramble")) {
            puzz.randomizePosition();
            disp.updateTiles();
        } else if (source.getText().equals("Order")) {
            puzz.orderPosition();
            disp.updateTiles();
        } else if (source.getText().equals("Quit")) {
            System.exit(0);
        } else
            System.out.println("Error--unexpected action detected by SquarePuzzleApp.");
    }

    public static void main(String[] args) {
        SquarePuzzleApp app = new SquarePuzzleApp(4,4);
    }
}
