/*
 * Jitsi, the OpenSource Java VoIP and Instant Messaging client.
 *
 * Copyright @ 2015 Atlassian Pty Ltd
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package net.java.sip.communicator.plugin.generalconfig.autoaway;

import net.java.sip.communicator.plugin.generalconfig.*;
import org.jitsi.service.configuration.*;
import org.jitsi.service.resources.*;

import java.beans.*;

/**
 * Preferences for the Status Update
 *
 * @author Thomas Hofer
 *
 */
public final class Preferences
{
    /**
     * Property indicating whether status change on away is enabled.
     */
    private static final String ENABLE
        = "net.java.sip.communicator.plugin.statusupdate.enable";

    /**
     * Property indicating the time in minutes to consider a pc in idle state.
     */
    private static final String TIMER
        = "net.java.sip.communicator.plugin.statusupdate.timer";

    /**
     * The default value to be displayed and to be considered
     * for {@link Preferences#TIMER}.
     */
    public static final int DEFAULT_TIMER = 15;

    /**
     * Whether change status on away is enabled.
     * @return whether change status on away is enabled.
     */
    static boolean isEnabled()
    {
        // if enabled start
        String enabledDefault
            = GeneralConfigPluginActivator.getResources().getSettingsString(
                    Preferences.ENABLE);

        return
            GeneralConfigPluginActivator
                .getConfigurationService()
                    .getBoolean(
                            Preferences.ENABLE,
                            Boolean.parseBoolean(enabledDefault));
    }

    /**
     * Returns the time in minutes to consider a pc in idle state.
     * @return  the time in minutes to consider a pc in idle state.
     */
    static int getTimer()
    {
        ConfigurationService cfg
            = GeneralConfigPluginActivator.getConfigurationService();
        ResourceManagementService resources
            = GeneralConfigPluginActivator.getResources();

        String enabledDefault = resources.getSettingsString(Preferences.ENABLE);

        String timerDefaultStr = resources.getSettingsString(Preferences.TIMER);
        int timerDefault = DEFAULT_TIMER;

        if (timerDefaultStr != null)
        {
            try
            {
                timerDefault = Integer.parseInt(timerDefaultStr);
            }
            catch (NumberFormatException nfe)
            {
            }
        }

        return
            cfg.getBoolean(
                    Preferences.ENABLE,
                    Boolean.parseBoolean(enabledDefault))
                ? cfg.getInt(Preferences.TIMER, timerDefault)
                : 0;
    }

    /**
     * Save data in the configuration file
     * @param enabled is enabled
     * @param timer the time value to save
     */
    static void saveData(boolean enabled, String timer)
    {
        ConfigurationService cfg
            = GeneralConfigPluginActivator.getConfigurationService();

        cfg.setProperty(Preferences.ENABLE, Boolean.toString(enabled));
        cfg.setProperty(Preferences.TIMER, timer);
    }

    /**
     * Adds listener to detect property changes.
     * @param listener the listener to notify.
     */
    static void addEnableChangeListener(PropertyChangeListener listener)
    {
        // listens for changes in configuration enable/disable
        GeneralConfigPluginActivator
            .getConfigurationService()
                .addPropertyChangeListener(
                        ENABLE,
                        listener);
    }

    /**
     * Adds listener to detect timer property changes.
     * @param listener the listener to notify.
     */
    static void addTimerChangeListener(PropertyChangeListener listener)
    {
        // listens for changes in configuration enable/disable
        GeneralConfigPluginActivator
            .getConfigurationService()
                .addPropertyChangeListener(
                        TIMER,
                        listener);
    }
}
