/*
   Copyright (C) 2013-2020 Nicola L.C. Talbot
   www.dickimaw-books.com

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
*/
package com.dickimawbooks.makeglossariesgui;

import java.io.*;
import java.awt.*;
import java.awt.event.*;

import javax.swing.*;

public class AppSelector extends JDialog
  implements ActionListener
{
  public AppSelector(MakeGlossariesGUI application)
  {
     super(application, application.getLabel("appselect.title"), true);
     app = application;

     if (System.getProperty("os.name").toLowerCase().startsWith("win"))
     {
        exeSuffix = ".exe";
     }

     message = new JLabel(application.getLabel("appselect.pathlabel"));
     message.setDisplayedMnemonic(application.getMnemonic("appselect.pathlabel"));

     getContentPane().add(message, "North");

     fileChooser = new JFileChooser();

     fileField = new FileField(application, this, fileChooser);

     getContentPane().add(fileField, "Center");

     JPanel buttonPanel = new JPanel();
     add(buttonPanel, "South");

     buttonPanel.add(app.createOkayButton(this));
     buttonPanel.add(app.createCancelButton(this));

     pack();
     Dimension dim = getSize();

     dim.width += 50;
     dim.height += 10;

     setSize(dim);

     setLocationRelativeTo(application);
  }

  public File findApp(String name)
  {
     return app.findApplication(name);
  }

  public File findApp(String name, String altName, String altName2)
  {
     return app.findApplication(name, altName, altName2);
  }

  public void actionPerformed(ActionEvent evt)
  {
     String action = evt.getActionCommand();

     if (action == null) return;

     if (action.equals("choose"))
     {
        if (fileChooser.showOpenDialog(this)
          == JFileChooser.APPROVE_OPTION)
        {
           fileField.setFileName(fileChooser.getSelectedFile().getAbsolutePath());
        }
     }
     else if (action.equals("okay"))
     {
        selectedFile = fileField.getFile();

        if (selectedFile == null || selectedFile.equals(""))
        {
           app.error(this, app.getLabel("error.no_file"));
        }
        else
        {
           setVisible(false);
        }
     }
     else if (action.equals("cancel"))
     {
        setVisible(false);
     }
  }

  public File fetchApplicationPath(String appName, String messageText)
  {
     return fetchApplicationPath(appName, null, null, messageText);
  }

  public File fetchApplicationPath(String appName, String altAppName,
     String altAppName2, String messageText)
  {
     selectedFile = null;

     File file = findApp(appName, altAppName, altAppName2);

     if (file != null)
     {
        fileChooser.setCurrentDirectory(file.getParentFile());
        fileChooser.setSelectedFile(file);

        fileField.setFileName(file.getAbsolutePath());
     }
     else
     {
        fileField.setFileName(appName+exeSuffix);
     }

     message.setText(messageText);

     setVisible(true);

     return selectedFile;
  }

  public File fetchApplicationPath(String messageText)
  {
     selectedFile = null;

     fileChooser.setSelectedFile(null);
     fileField.setFileName("");

     message.setText(messageText);

     setVisible(true);

     return selectedFile;
  }

  private File selectedFile = null;

  private JLabel message;

  private FileField fileField;

  private JFileChooser fileChooser;

  private MakeGlossariesGUI app;

  private String exeSuffix = "";
}