/**
 * A text adventure game.
 */
package adventure;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.LineBorder;

/**
 * @author David Matuszek
 * @author // TODO Put your name here
 */
public class TextAdventure extends JFrame {
    private JLabel locationLabel;
    private JTextArea exitsArea;
    private JTextArea roomContentsArea;
    private JTextArea holdingArea;
    private JTextArea mainArea;
    private JButton helpButton;
    private JTextField commandField;
    
    private TextAdventure gui;
    private AdventureModel model;
    
    /**
     * Starts the game.
     * 
     * @param args Unused.
     */
    public static void main(String[] args) {
        new TextAdventure().run();
    }

    /**
     * Runs the game.
     */
    private void run() {
        model = new AdventureModel();
        gui = this;
        createGui();
    }

    /**
     * Creates the GUI.
     */
    private void createGui() {
        createComponents();
        arrangeComponents();
        attachListeners();
        pack();
        setVisible(true);
        this.setDefaultCloseOperation(EXIT_ON_CLOSE);
        this.setLocationRelativeTo(null);
    }

    /**
     * Creates all globally available components.
     */
    private void createComponents() {
        setBackground(Color.WHITE);
        locationLabel = new JLabel(" Your location: house");;
        exitsArea = new JTextArea("north\neast\nwest\nup", 6, 12);
        roomContentsArea = new JTextArea("key\nsword\ncoin");
        holdingArea = new JTextArea("flashlight\nbadge");
        mainArea = new JTextArea(24, 30);
        helpButton = new JButton("?");
        commandField = new JTextField();
    }

    /**
     * Lays out all components.
     */
    private void arrangeComponents() {
        setLayout(new BorderLayout());
        // Location area at top
        add(locationLabel, BorderLayout.NORTH);

        // Main area
        mainArea.setLineWrap(true);
        add(new JScrollPane(mainArea), BorderLayout.CENTER);
        
        // Right side, composed of three panels
        JPanel panel1 = new JPanel();
        panel1.setLayout(new GridLayout(3, 1));

        JPanel panel2 = new JPanel();
        panel2.setLayout(new BorderLayout());
        panel2.add(new JLabel(" Exits:"), BorderLayout.NORTH);
        panel2.add(new JScrollPane(exitsArea), BorderLayout.CENTER);
        panel2.setBorder(new LineBorder(Color.BLACK));
        panel2.setBackground(new Color(0xFFCCCC));
        panel1.add(panel2);

        JPanel panel3 = new JPanel();
        panel3.setLayout(new BorderLayout());
        panel3.add(new JLabel(" You see:"), BorderLayout.NORTH);
        panel3.add(new JScrollPane(roomContentsArea), BorderLayout.CENTER);
        panel3.setBorder(new LineBorder(Color.BLACK));
        panel3.setBackground(new Color(0xCCFFCC));
        panel1.add(panel3);

        JPanel panel4 = new JPanel();
        panel4.setLayout(new BorderLayout()); 
        panel4.add(new JLabel("You are holding:"), BorderLayout.NORTH);
        panel4.add(new JScrollPane(holdingArea), BorderLayout.CENTER);
        panel4.setBorder(new LineBorder(Color.BLACK));
        panel4.setBackground(new Color(0xCCCCFF));
        panel1.add(panel4);

        add(panel1, BorderLayout.EAST);
        
      JPanel panel6 = new JPanel();
      panel6.setLayout(new BorderLayout());
      panel6.add(new JLabel(" What shall I do now? "), BorderLayout.WEST);
      panel6.add(commandField, BorderLayout.CENTER);
      panel6.add(helpButton, BorderLayout.EAST);
      
      add(panel6, BorderLayout.SOUTH);
    }

    /**
     * Attaches listeners to all active components.
     */
    private void attachListeners() {
        helpButton.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JOptionPane.showMessageDialog(gui, model.getListOfCommands());
            }
            
        });
    }

}

