/*
 * Copyright 2010-2015 Institut Pasteur.
 * 
 * This file is part of Icy.
 * 
 * Icy 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.
 * 
 * Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
 */
package icy.preferences;

import icy.file.FileUtil;
import icy.gui.dialog.IdConfirmDialog;
import icy.gui.frame.progress.ToolTipFrame;
import icy.gui.util.LookAndFeelUtil;
import icy.roi.ROI.ROIPainter;

/**
 * @author Stephane
 */
public class GeneralPreferences
{
    /**
     * pref id
     */
    public static final String PREF_GENERAL_ID = "general";
    public static final String TOOLTIPS_ID = "toolTips";
    public static final String CONFIRMS_ID = "confirms";
    public static final String ROIOVERLAY_ID = "roiOverlay";

    /**
     * id general
     */
    public static final String ID_SEQUENCE_PERSISTENCE = "sequencePersistence";
    public static final String ID_SAVE_NEW_SEQUENCE = "saveNewSequence";
    public static final String ID_AUTO_UPDATE = "autoUpdate";
    public static final String ID_LAST_UPDATECHECK_TIME = "lastUpdateCheckTime";
    public static final String ID_RIBBON_MINIMIZED = "ribbonMinimized";
    public static final String ID_DETACHED_MODE = "detached";
    public static final String ID_ALWAYS_ON_TOP = "alwaysOnTop";
    public static final String ID_USAGE_STATS_REPORT = "usageStatsReport";
    public static final String ID_GUI_SKIN = "guiSkin";
    public static final String ID_GUI_FONT_SIZE = "guiFontSize";
    public static final String ID_STARTUP_TOOLTIP = "startupTooltip";
    public static final String ID_LOADER_FOLDER = "loaderFolder";
    public static final String ID_RESULT_FOLDER = "resultFolder";
    public static final String ID_USER_LOGIN = "userLogin";
    public static final String ID_USER_NAME = "userName";
    public static final String ID_USER_EMAIL = "userEmail";
    public static final String ID_HISTORY_SIZE = "historySize";

    /**
     * id confirm
     */
    public static final String ID_CONFIRM_EXIT = "exit";

    /**
     * preferences
     */
    private static XMLPreferences prefGeneral;
    private static XMLPreferences prefToolTips;
    private static XMLPreferences prefConfirms;
    private static XMLPreferences prefRoiOverlay;

    public static void load()
    {
        // load preferences
        prefGeneral = ApplicationPreferences.getPreferences().node(PREF_GENERAL_ID);
        prefToolTips = prefGeneral.node(TOOLTIPS_ID);
        prefConfirms = prefGeneral.node(CONFIRMS_ID);
        prefRoiOverlay = prefGeneral.node(ROIOVERLAY_ID);
    }

    /**
     * @deprecated Use {@link #getPreferences()} instead
     */
    @Deprecated
    public static XMLPreferences getPreferencesGeneral()
    {
        return getPreferences();
    }

    /**
     * @return the preferences
     */
    public static XMLPreferences getPreferences()
    {
        return prefGeneral;
    }

    /**
     * @return the root preferences for tool tips ({@link ToolTipFrame}).
     */
    public static XMLPreferences getPreferencesToolTips()
    {
        return prefToolTips;
    }

    /**
     * @return the root preferences for confirm dialog ({@link IdConfirmDialog}).
     */
    public static XMLPreferences getPreferencesConfirms()
    {
        return prefConfirms;
    }

    /**
     * @return the root preferences for ROI overlay setting ({@link ROIPainter}).
     */
    public static XMLPreferences getPreferencesRoiOverlay()
    {
        return prefRoiOverlay;
    }

    public static boolean getExitConfirm()
    {
        return prefConfirms.getBoolean(ID_CONFIRM_EXIT, true);
    }

    public static boolean getSaveNewSequence()
    {
        return prefGeneral.getBoolean(ID_SAVE_NEW_SEQUENCE, false);
    }

    public static boolean getSequencePersistence()
    {
        return prefGeneral.getBoolean(ID_SEQUENCE_PERSISTENCE, true);
    }

    public static boolean getAutomaticUpdate()
    {
        return prefGeneral.getBoolean(ID_AUTO_UPDATE, true);
    }

    public static long getLastUpdateCheckTime()
    {
        return prefGeneral.getLong(ID_LAST_UPDATECHECK_TIME, 0);
    }

    public static boolean getRibbonMinimized()
    {
        return prefGeneral.getBoolean(ID_RIBBON_MINIMIZED, false);
    }

    public static boolean getMultiWindowMode()
    {
        return prefGeneral.getBoolean(ID_DETACHED_MODE, false);
    }

    public static boolean getAlwaysOnTop()
    {
        return prefGeneral.getBoolean(ID_ALWAYS_ON_TOP, false);
    }

    public static boolean getUsageStatisticsReport()
    {
        return prefGeneral.getBoolean(ID_USAGE_STATS_REPORT, true);
    }

    public static boolean getStatupTooltip()
    {
        return prefGeneral.getBoolean(ID_STARTUP_TOOLTIP, true);
    }

    public static String getLoaderFolder()
    {
        return prefGeneral.get(ID_LOADER_FOLDER, "");
    }

    public static String getResultFolder()
    {
        return prefGeneral.get(ID_RESULT_FOLDER, FileUtil.APPLICATION_DIRECTORY + FileUtil.separator + "result");
    }

    public static String getUserLogin()
    {
        return prefGeneral.get(ID_USER_LOGIN, "");
    }

    public static String getUserName()
    {
        return prefGeneral.get(ID_USER_NAME, "");
    }

    public static String getUserEmail()
    {
        return prefGeneral.get(ID_USER_EMAIL, "");
    }

    public static int getGuiFontSize()
    {
        return prefGeneral.getInt(ID_GUI_FONT_SIZE, LookAndFeelUtil.getDefaultFontSize());
    }

    public static String getGuiSkin()
    {
        return prefGeneral.get(ID_GUI_SKIN, LookAndFeelUtil.getDefaultSkin());
    }

    public static int getHistorySize()
    {
        return prefGeneral.getInt(ID_HISTORY_SIZE, 50);
    }

    public static void setExitConfirm(boolean value)
    {
        prefConfirms.putBoolean(ID_CONFIRM_EXIT, value);
    }

    public static void setSaveNewSequence(boolean value)
    {
        prefGeneral.putBoolean(ID_SAVE_NEW_SEQUENCE, value);
    }

    public static void setSequencePersistence(boolean value)
    {
        prefGeneral.putBoolean(ID_SEQUENCE_PERSISTENCE, value);
    }

    public static void setAutomaticUpdate(boolean value)
    {
        prefGeneral.putBoolean(ID_AUTO_UPDATE, value);
    }

    public static void setUsageStatisticsReport(boolean value)
    {
        prefGeneral.putBoolean(ID_USAGE_STATS_REPORT, value);
    }

    public static void setLastUpdateCheckTime(long time)
    {
        prefGeneral.putLong(ID_LAST_UPDATECHECK_TIME, time);
    }

    public static void setRibbonMinimized(boolean value)
    {
        prefGeneral.putBoolean(ID_RIBBON_MINIMIZED, value);
    }

    public static void setMultiWindowMode(boolean value)
    {
        prefGeneral.putBoolean(ID_DETACHED_MODE, value);
    }

    public static void setAlwaysOnTop(boolean value)
    {
        prefGeneral.putBoolean(ID_ALWAYS_ON_TOP, value);
    }

    public static void setStatupTooltip(boolean value)
    {
        prefGeneral.putBoolean(ID_STARTUP_TOOLTIP, value);
    }

    public static void setLoaderFolder(String value)
    {
        prefGeneral.put(ID_LOADER_FOLDER, value);
    }

    public static void setResultFolder(String value)
    {
        prefGeneral.put(ID_RESULT_FOLDER, value);
    }

    public static void setUserLogin(String value)
    {
        prefGeneral.put(ID_USER_LOGIN, value);
    }

    public static void setUserName(String value)
    {
        prefGeneral.put(ID_USER_NAME, value);
    }

    public static void setUserEmail(String value)
    {
        prefGeneral.put(ID_USER_EMAIL, value);
    }

    public static void setGuiFontSize(int value)
    {
        prefGeneral.putInt(ID_GUI_FONT_SIZE, value);
    }

    public static void setGuiSkin(String value)
    {
        prefGeneral.put(ID_GUI_SKIN, value);
    }

    public static void setHistorySize(int value)
    {
        prefGeneral.putInt(ID_HISTORY_SIZE, value);
    }
}