import java.util.*;
import javax.swing.*;


public class MazeView extends JPanel implements Observer {
	
	private JTextField rowField = new JTextField("0", 10);
	private JTextField colField = new JTextField("0", 10);
	private JTextField movesField = new JTextField("0", 10);
	private Maze myMaze;
	private int maxMoves;
	
	public MazeView(Maze maze, int maxMoves) {
		
		myMaze = maze;
		myMaze.addObserver(this);
		this.maxMoves = maxMoves;
		
		System.out.println("exit = " + myMaze.getExitRow() + ", " + myMaze.getExitCol());
		
		ControllerAdapter ca = new ControllerAdapter(myMaze);
		
		add(new JLabel("row"));
		add(rowField);
		add(new JLabel("col"));
		add(colField);
		add(new JLabel("moves"));
		add(movesField);
		
		JButton button = new JButton("North");
		add(button);
		button.addActionListener(ca);
		
		button = new JButton("East");
		add(button);
		button.addActionListener(ca);
		
		button = new JButton("West");
		add(button);
		button.addActionListener(ca);
		
		button = new JButton("South");
		add(button);
		button.addActionListener(ca);
		
		button = new JButton("Reset");
		add(button);
		button.addActionListener(ca);
		
	}
	
	@Override
	public void update(Observable o, Object arg) {
		int row = myMaze.getPlayerRow();
		int col = myMaze.getPlayerCol();
		int exitRow = myMaze.getExitRow();
		int exitCol = myMaze.getExitCol();
		int moves = myMaze.getPlayerMoves();
		
		if (maxMoves < moves) {
			JOptionPane.showMessageDialog(this, "you loose!");
		} else if (row == exitRow && col == exitCol) {
			JOptionPane.showMessageDialog(this, "you win!");
		} else {
			rowField.setText("" + row);
			colField.setText("" + col);
			movesField.setText("" + moves);
		}
	}
	
	public void display() {
		JFrame viewer = new JFrame();
		viewer.setTitle("Maze Challenge");
		viewer.add(this);
		viewer.pack();
		viewer.setVisible(true);
	}
	
	public static void main(String[] args) {
		Maze maze = new Maze(10, 10);
		MazeView gui = new MazeView(maze, 10);
		gui.display();
		
	}
	

}
