package com.sun.star.wizards.ui;

import com.sun.star.awt.XTextComponent;
import com.sun.star.lang.XMultiServiceFactory;
import com.sun.star.uno.Exception;
import com.sun.star.wizards.common.FileAccess;
import com.sun.star.wizards.common.SystemDialog;

public class PathSelection {

    UnoDialog2 CurUnoDialog;
    XMultiServiceFactory xMSF;
    int iDialogType;
    int iTransferMode;

    public String sDefaultDirectory = "";
    public String sDefaultName = "";
    public String sDefaultFilter = "";

    public boolean usedPathPicker = false;

    public XPathSelectionListener xAction;
    public XTextComponent xSaveTextBox;

    private final int CMDSELECTPATH = 1;
    private final int TXTSAVEPATH = 1;

    public static class DialogTypes {
        public static final int FOLDER = 0;
        public static final int FILE = 1;
    }

    public static class TransferMode {
        public static final int SAVE = 0;
        public static final int LOAD = 1;
    }

    public PathSelection(XMultiServiceFactory xMSF, UnoDialog2 CurUnoDialog, int TransferMode, int DialogType) {
        this.CurUnoDialog = CurUnoDialog;
        this.xMSF = xMSF;
        this.iDialogType = DialogType;
        this.iTransferMode = TransferMode;

    }

    public void insert(int DialogStep, int XPos, int YPos, int Width, short CurTabIndex, String LabelText, boolean Enabled, String TxtHelpURL, String BtnHelpURL) {

        CurUnoDialog.insertControlModel("com.sun.star.awt.UnoControlFixedTextModel", "lblSaveAs", new String[] { "Enabled", "Height", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width" }, new Object[] { new Boolean(Enabled), new Integer(8), LabelText, new Integer(XPos), new Integer(YPos), new Integer(DialogStep), new Short(CurTabIndex), new Integer(Width)});

        xSaveTextBox = CurUnoDialog.insertTextField("txtSavePath", "callXPathSelectionListener", this, new String[] { "Enabled", "Height", "HelpURL", "PositionX", "PositionY", "Step", "TabIndex", "Width" }, new Object[] { new Boolean(Enabled), new Integer(12), TxtHelpURL, new Integer(XPos), new Integer(YPos + 10), new Integer(DialogStep), new Short((short)(CurTabIndex + 1)), new Integer(Width - 26)});
        //CurUnoDialog.setControlProperty("txtSavePath", "ReadOnly", Boolean.TRUE);
        CurUnoDialog.setControlProperty("txtSavePath", "Enabled", Boolean.FALSE);
        CurUnoDialog.insertButton("cmdSelectPath", "triggerPathPicker", this, new String[] { "Enabled", "Height", "HelpURL", "Label", "PositionX", "PositionY", "Step", "TabIndex", "Width" }, new Object[] { new Boolean(Enabled), new Integer(14), BtnHelpURL, "...", new Integer(XPos + Width - 16), new Integer(YPos + 9), new Integer(DialogStep), new Short((short)(CurTabIndex + 2)), new Integer(16)});

    }

    public void addSelectionListener(XPathSelectionListener xAction) {
        this.xAction = xAction;
    }

    public String getSelectedPath() {
        return xSaveTextBox.getText();
    }

    public void initializePath() {
        try {
            FileAccess myFA = new FileAccess(xMSF);
            xSaveTextBox.setText(myFA.getPath(sDefaultDirectory + "/" + sDefaultName, null));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public void triggerPathPicker() {
        try {
            switch (iTransferMode) {
                case TransferMode.SAVE :
                    switch (iDialogType) {
                        case DialogTypes.FOLDER :
                            //TODO: write code for picking a folder for saving
                            break;
                        case DialogTypes.FILE :
                            usedPathPicker = true;
                            SystemDialog myFilePickerDialog = SystemDialog.createStoreDialog(xMSF);
                            myFilePickerDialog.callStoreDialog(sDefaultDirectory, sDefaultName, sDefaultFilter);
                            String sStorePath = myFilePickerDialog.sStorePath;
                            if (sStorePath != null) {
                                FileAccess myFA = new FileAccess(xMSF);
                                xSaveTextBox.setText(myFA.getPath(sStorePath,null));
                                sDefaultDirectory = FileAccess.getParentDir(sStorePath);
                                sDefaultName = myFA.getFilename(sStorePath);
                            }
                            break;
                        default :
                            break;
                    }
                    break;
                case TransferMode.LOAD :
                    switch (iDialogType) {
                        case DialogTypes.FOLDER :
                            //TODO: write code for picking a folder for loading
                            break;
                        case DialogTypes.FILE :
                            //TODO: write code for picking a file for loading
                            break;
                        default :
                            break;
                    }
                    break;
                default :
                    break;
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    public void callXPathSelectionListener() {
        if (xAction != null)
            xAction.validatePath();
    }

}
