#include "FileDialog.h"
#include "Settings.h"

QString FileDialog::getOpenFileName(QWidget* parent, const QString& caption, const QString &filter, QString *selectedFilter, Options options)
{
    QString result = QFileDialog::getOpenFileName(parent, caption, getFileDialogPath(), filter, selectedFilter, options);
    if(!result.isEmpty())
        setFileDialogPath(result);
    return result;
}

QString FileDialog::getSaveFileName(QWidget* parent, const QString& caption, const QString& filter, const QString& defaultFileName, QString* selectedFilter, Options options)
{
    QString dir = getFileDialogPath();
    if(!defaultFileName.isEmpty())
        dir += "/" + defaultFileName;

    QString result = QFileDialog::getSaveFileName(parent, caption, defaultFileName, filter, selectedFilter, options);
    if(!result.isEmpty())
        setFileDialogPath(result);
    return result;
}

QString FileDialog::getExistingDirectory(QWidget* parent, const QString& caption, Options options)
{
    QString result = QFileDialog::getExistingDirectory(parent, caption, getFileDialogPath(), options);
    if(!result.isEmpty())
        setFileDialogPath(result);
    return result;
}

QString FileDialog::getFileDialogPath()
{
    switch(Settings::getSettingsValue("db", "savedefaultlocation").toInt())
    {
    case 0:     // Remember last location
    case 2:     // Remember last location for current session only
        return Settings::getSettingsValue("db", "lastlocation").toString();
    case 1:     // Always use this locations
        return Settings::getSettingsValue("db", "defaultlocation").toString();
    default:
        return "";
    }
}

void FileDialog::setFileDialogPath(const QString& new_path)
{
    QString dir = QFileInfo(new_path).absolutePath();

    switch(Settings::getSettingsValue("db", "savedefaultlocation").toInt())
    {
    case 0:     // Remember last location
        Settings::setSettingsValue("db", "lastlocation", dir);
        break;
    case 2:     // Remember last location for current session only
        Settings::setSettingsValue("db", "lastlocation", dir, true);
        break;
    case 1:     // Always use this locations
        break;  // Do nothing
    }
}
