package com.agical.bumblebee.acceptance.swing.application;

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.GridLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JTree;

public class Application {

    private JFrame frame;
    private JPanel form;
    private JLabel nameLabel;
    private JLabel emailLabel;
    private JLabel phoneLabel;
    private Thread thread;

    public Application() {
        start();
    }
    
    public Component getForm() {
        return form;
    }
    
    public JFrame getFrame() {
        return frame;
    }
    
    private void start() {
        frame = new JFrame();
        Container contentPane = frame.getContentPane();
        contentPane.setLayout(new BorderLayout());
        contentPane.add(createMenu(), BorderLayout.NORTH);
        contentPane.add(createTree(), BorderLayout.WEST);
        contentPane.add(createFormPanel(), BorderLayout.CENTER);
        contentPane.add(createStatusBar(), BorderLayout.SOUTH);
        frame.setSize(600,400);
        frame.setVisible(true);
        waitForValidFrame();
    }

    public void stop() {
        frame.dispose();
    }
    
    private void waitForValidFrame() {
        try {
            long start = System.currentTimeMillis();
            long timeout = 5000;
            while(!frame.isActive() && start+timeout>System.currentTimeMillis()) {
                Thread.sleep(500);
            }
        } catch (InterruptedException e) {
            throw new RuntimeException( "", e );
        }
    }
    
    private JTextField createStatusBar() {
        return new JTextField("INFO It's easy to update your " +
                "documentation if you generate it");
    }

    private JTree createTree() {
        return new JTree();
    }

    
    private Component createFormPanel() {
        JPanel panel = new JPanel(new FlowLayout(FlowLayout.LEFT));
        form = new JPanel(new GridLayout(4,2, 4, 4));
        nameLabel = new JLabel("Name");
        form.add(nameLabel);
        form.add(new JTextField());
        emailLabel = new JLabel("Email");
        form.add(emailLabel);
        form.add(new JTextField());
        phoneLabel = new JLabel("Phone nr");
        form.add(phoneLabel);
        form.add(new JTextField());
        form.add(new JButton("Ok"));
        form.add(new JButton("Cancel"));
        panel.add(form);
        return panel;
    }

    private JMenuBar createMenu() {
        JMenuBar menuBar = new JMenuBar();
        menuBar.add(new JMenu("File"));
        menuBar.add(new JMenu("Edit"));
        menuBar.add(new JMenu("View"));
        menuBar.add(new JMenu("About"));
        return menuBar;
    }

    public Component getNameLabel() {
        return nameLabel;
    }
    public Component getEmailLabel() {
        return emailLabel;
    }
    public Component getPhoneLabel() {
        return phoneLabel;
    }

}