package org.greenstone.admin.guiext.mat;

import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;

import java.util.Properties;

import java.io.FileInputStream;

import org.greenstone.util.BrowserLauncher;

import org.greenstone.admin.guiext.BasePanel;

import org.greenstone.admin.GAI;

public class ControlPanel implements BasePanel
{
    JPanel _controlPanel = null;
    JCheckBox _localAnalysis = null;
    
    public ControlPanel()
    {
	_controlPanel = new JPanel();
	_controlPanel.setLayout(new BorderLayout());

	Mat mat = new Mat();

	final int left_margin = 7;
	final int right_margin = 7;
	final int HORIZONTAL_GAP = 5;
	final int VERTICAL_GAP = 5;

	String fileSep = System.getProperty("file.separator");

	JButton start_button = new JButton("Analyse");
	start_button.setPreferredSize(new Dimension(50,25));
	start_button.setMaximumSize(new Dimension(50,25));
	start_button.setName("Analyse");
	start_button.setEnabled(true);
	start_button.addActionListener(new aListener(mat));

	JLabel oai_temp_directory = new JLabel();
	oai_temp_directory.setText("OAI temporary download directory:");
	
	JTextField oai_temp_directory_text = new JTextField();
	oai_temp_directory_text.setText(GAI.getGSDL3ExtensionHome() + fileSep + "mat" + fileSep + "tmp");
	oai_temp_directory_text.setEditable(false);
	oai_temp_directory_text.setBackground(Color.WHITE);
	
	JLabel install_path = new JLabel();
	install_path.setText("Metadata Quality Tool is installed in:");
	
	JTextField install_path_text = new JTextField();
	install_path_text.setText(GAI.getGSDL3ExtensionHome() + fileSep + "mat");
	install_path_text.setEditable(false);
	install_path_text.setBackground(Color.WHITE);	

	JCheckBox web_tool_checkbox = new JCheckBox("Web OAI Collection Building");
	web_tool_checkbox.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
	web_tool_checkbox.setVisible(false);

	_localAnalysis = new JCheckBox("Local Collection Analysis");
	_localAnalysis.setBorder(BorderFactory.createEmptyBorder(0,0,0,0));
	
	GridLayout gridLayout3 = new GridLayout(3,3);
	gridLayout3.setVgap(VERTICAL_GAP);
	JPanel control_content_pane = new JPanel(gridLayout3);
	control_content_pane.setBorder(BorderFactory.createEmptyBorder(5, left_margin, 5, right_margin));
	
	GridLayout gridLayout2 = new GridLayout(1,2);
	gridLayout2.setHgap(HORIZONTAL_GAP);
	JPanel control_button_pane = new JPanel(gridLayout2);
	control_button_pane.setBorder(BorderFactory.createEmptyBorder(5, left_margin, 5, right_margin));
	
	GridLayout gridLayout1 = new GridLayout(2,2);
	gridLayout1.setVgap(VERTICAL_GAP);
	JPanel control_description_pane = new JPanel(gridLayout1);
	control_description_pane.setBorder(BorderFactory.createEmptyBorder(5, left_margin, 5, right_margin));
	
	JPanel control_pane = new JPanel();
	control_pane.setLayout(new BoxLayout(control_pane, BoxLayout.Y_AXIS));

	control_content_pane.add(_localAnalysis);
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	
	JPanel tempPane = new JPanel(new BorderLayout());
	tempPane.add(Box.createRigidArea(new Dimension(18,5)), BorderLayout.WEST);
	tempPane.add(start_button, BorderLayout.CENTER);
	control_content_pane.add(tempPane);
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	
	//control_content_pane.add(web_tool_checkbox);
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));
	control_content_pane.add(Box.createRigidArea(new Dimension(10,5)));

	control_description_pane.add(install_path);
	control_description_pane.add(install_path_text);
	
	control_description_pane.add(oai_temp_directory);
	control_description_pane.add(oai_temp_directory_text);
      	
	control_content_pane.setAlignmentX(Component.LEFT_ALIGNMENT);
	control_pane.add(control_content_pane);
	
	control_description_pane.setAlignmentX(Component.LEFT_ALIGNMENT);
	control_pane.add(control_description_pane);
	
	control_button_pane.setAlignmentX(Component.LEFT_ALIGNMENT);
	control_pane.add(control_button_pane);
	_controlPanel.add(control_pane, BorderLayout.CENTER);
    }
    
    public JPanel getPanel()
    {
	return _controlPanel;
    }

    class aListener implements ActionListener {
	
	private Mat adaptee;
	
	aListener(Mat adaptee) {	
	    this.adaptee = adaptee;
	}
    
	public void actionPerformed(ActionEvent e) {
	
	    JButton button = (JButton)e.getSource();
	
	    if(button.getName().equalsIgnoreCase("Analyse")){
		if(_localAnalysis.isSelected()){
		    execute_application();
		}
		else{
		    try{
			Properties properties = new Properties();
			FileInputStream fis = new FileInputStream(GAI.getGSDL3Home() + System.getProperty("file.separator") + "build.properties");
			properties.load(fis);
			fis.close();
			Thread bl = new BrowserLauncher("", "http://" + properties.getProperty("tomcat.server") + ":" + properties.getProperty("tomcat.port") + "/mat/analyse");
			bl.run();
		    }
		    catch(Exception ex){
			ex.printStackTrace();
		    }
		}
	    }
	}
    
	public void execute_application(){
	    MatLaunchApplication app = new MatLaunchApplication(adaptee);
	    app.start();
	}
    }
}