package org.thdl.tib.scanner;

import java.awt.BorderLayout;
import java.awt.Checkbox;
import java.awt.CheckboxGroup;
import java.awt.Choice;
import java.awt.FileDialog;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.Panel;
import java.awt.event.ActionEvent;
import java.awt.event.ItemEvent;

import javax.swing.JFileChooser;

/** provides a friendly user interface when the command-line
    is not used for choosing a dictionary or connection to open.
*/
class SwingWhichDictionaryFrame extends WhichDictionaryFrame
{
    private CreateDatabaseWizard cdw;
    private DictionaryFileFilter dicFilter;
    private Checkbox createNewDictDB;
    
    public SwingWhichDictionaryFrame(Frame owner)
    {
        super(owner);
        Panel p;
        CheckboxGroup cbg = new CheckboxGroup();

        dicFilter = null;
        
        this.setLayout(new GridLayout(6, 1));
        
        this.setSize(400, 200);
        this.add(new Label("Would you like to:"));
        
        p = new Panel(new BorderLayout());
        
        useOnline = new Checkbox("Access an on-line dictionary", false, cbg);
        useOnline.addItemListener(this);
        p.add(useOnline, BorderLayout.WEST);

        availDictsOnline.add("Public version");
        
        if (TibetanScanner.mode == TibetanScanner.DEBUG_MODE)
        	availDictsOnline.add("Local version (development)");
        
        p.add(availDictsOnline, BorderLayout.EAST);
        this.add(p);
        
        p = new Panel(new BorderLayout());
        
        useOffline = new Checkbox("Access a local dictionary: ", true, cbg);
        useOffline.addItemListener(this);
        p.add(useOffline, BorderLayout.WEST);
        
        p.add(localDict, BorderLayout.CENTER);
        
        p.add(browse, BorderLayout.EAST);
        this.add(p);
        
        createNewDictDB = new Checkbox("Create a new dictionary...", false, cbg);
        createNewDictDB.addItemListener(this);
        this.add(createNewDictDB);
        
        p = new Panel(new FlowLayout());

        p.add(ok);
        p.add(cancel);
        this.add(p);
        
        p = new Panel(new FlowLayout(FlowLayout.RIGHT));
        ckbDefault = new Checkbox("Use these settings as default", true);
        p.add(ckbDefault);
        this.add(p);
    }

    public void actionPerformed(ActionEvent e)	
    {
		Object obj = e.getSource();
		
		if (obj == ok)
		{
		    if (response.equals(""))
		    {
		        if (cdw==null) cdw = new CreateDatabaseWizard(owner);
		        cdw.setVisible(true);
		        response = cdw.getResponse();
		    }
		    if (!response.equals("")) this.setVisible(false);
		}
		else if (obj == cancel)
		{
		    response = "";
		    this.setVisible(false);
		}
		else if (obj == browse)
		{
		    if (dicFilter == null) dicFilter = new DictionaryFileFilter();
		    JFileChooser fileChooser = new JFileChooser("Select dictionary to open");
		    fileChooser.addChoosableFileFilter(dicFilter);
		    /*setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));

            if (fileChooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION)
            {
                setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
                return;
            }*/
            if (fileChooser.showOpenDialog(this) == JFileChooser.APPROVE_OPTION)
            {
                response = fileChooser.getSelectedFile().getPath();
                response = response.substring(0, response.length()-4);
                localDict.setText(response);
		        ok.setEnabled(true);
            }
		}
	}
	
	/** Implement the disabling of other guys here
	*/
	public void itemStateChanged(ItemEvent e)
	{
	    Object obj = e.getSource();
	    int dictNumber;
	    
	    if (obj instanceof Checkbox)
	    {
	        Checkbox chx = (Checkbox) obj;
	        //System.out.println(obj);
	        if (chx == useOnline)
	        {
	            localDict.setEnabled(false);
	            browse.setEnabled(false);
	            availDictsOnline.setEnabled(true);
	            ok.setEnabled(true);
	            dictNumber = availDictsOnline.getSelectedIndex();
	            dictType = dictNumber + 1;
	            response = dictsOnline[dictNumber];
	        }
	        else if (chx == useOffline)
	        {
	            localDict.setEnabled(true);
	            browse.setEnabled(true);
	            if (availDictsOnline!=null)  availDictsOnline.setEnabled(false);
	            ok.setEnabled(!localDict.getText().equals(""));
	            response = localDict.getText();
	            dictType = 0;
	        }
	        else if (chx == createNewDictDB)
	        {
	            localDict.setEnabled(false);
	            browse.setEnabled(false);
	            if (availDictsOnline!=null) availDictsOnline.setEnabled(false);
	            ok.setEnabled(true);
	            response="";
	            dictType = 0;
	        }
	    }
	    else if (obj instanceof Choice)
	    {
	        Choice ch = (Choice) obj;
	        dictNumber = ch.getSelectedIndex();
	        dictType = dictNumber + 1;
	        response = dictsOnline[dictNumber];
	    }
	}

}