/*
 * 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 org.jitsi.service.packetlogging;

/**
 * Stores the configuration used by Packet Logging Service.
 *
 * @author Damian Minkov
 */
public class PacketLoggingConfiguration
{
    /**
     * Configuration property for packet logging enabled/disabled.
     */
    public final static String PACKET_LOGGING_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_ENABLED";

    /**
     * Configuration property for packet logging for
     * sip protocol enabled/disabled.
     */
    public final static String PACKET_LOGGING_SIP_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_SIP_ENABLED";

    /**
     * Configuration property for packet logging for
     * jabber protocol enabled/disabled.
     */
    public final static String PACKET_LOGGING_JABBER_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_JABBER_ENABLED";

    /**
     * Configuration property for packet logging for
     * RTP enabled/disabled.
     */
    public final static String PACKET_LOGGING_RTP_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_RTP_ENABLED";

    /**
     * Configuration property for packet logging for
     * ICE4J enabled/disabled.
     */
    public final static String PACKET_LOGGING_ICE4J_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_ICE4J_ENABLED";

    /**
     * Configuration property for enabling/disabling arbitrary packet logging.
     */
    public final static String PACKET_LOGGING_ARBITRARY_ENABLED_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging." +
            "PACKET_LOGGING_ARBITRARY_ENABLED";

    /**
     * Configuration property for packet logging file count.
     */
    public final static String PACKET_LOGGING_FILE_COUNT_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_FILE_COUNT";

    /**
     * Configuration property for packet logging file size.
     */
    public final static String PACKET_LOGGING_FILE_SIZE_PROPERTY_NAME
        = "net.java.sip.communicator.packetlogging.PACKET_LOGGING_FILE_SIZE";

    /**
     * Is Packet Logging Service enabled.
     */
    private boolean globalLoggingEnabled = true;

    /**
     * Is Packet Logging Service enabled for sip protocol.
     */
    private boolean sipLoggingEnabled = true;

    /**
     * Is Packet Logging Service enabled for jabber protocol.
     */
    private boolean jabberLoggingEnabled = true;

    /**
     * Is Packet Logging Service enabled for rtp.
     */
    private boolean rtpLoggingEnabled = true;

    /**
     * Is Packet Logging Service enabled for ice4j.
     */
    private boolean ice4jLoggingEnabled = true;

    /**
     * Is Packet Logging Service enabled for arbitrary packets.
     */
    private boolean arbitraryLoggingEnabled = true;

    /**
     * The limit for the file size.
     * 0 means no limit.
     */
    private long limit = 5000000;

     /**
     * The counter for number of files.
     */
    private int logfileCount = 3;

    /**
     * Checks whether packet logging is enabled in the configuration.
     * @return <tt>true</tt> if packet logging is enabled.
     */
    public boolean isGlobalLoggingEnabled()
    {
        return this.globalLoggingEnabled;
    }

    /**
     * Checks whether packet logging is enabled in the configuration
     * for sip protocol.
     * @return <tt>true</tt> if packet logging is enabled for sip protocol.
     */
    public boolean isSipLoggingEnabled()
    {
        return this.sipLoggingEnabled;
    }

    /**
     * Checks whether packet logging is enabled in the configuration
     * for jabber protocol.
     * @return <tt>true</tt> if packet logging is enabled for jabber protocol.
     */
    public boolean isJabberLoggingEnabled()
    {
        return this.jabberLoggingEnabled;
    }

    /**
     * Checks whether packet logging is enabled in the configuration
     * for RTP.
     * @return <tt>true</tt> if packet logging is enabled for RTP.
     */
    public boolean isRTPLoggingEnabled()
    {
        return this.rtpLoggingEnabled;
    }

    /**
     * Checks whether packet logging is enabled in the configuration
     * for Ice4J.
     * @return <tt>true</tt> if packet logging is enabled for Ice4J.
     */
    public boolean isIce4JLoggingEnabled()
    {
        return this.ice4jLoggingEnabled;
    }

    /**
     * Checks whether packet logging is enabled in the configuration
     * for arbitrary packets.
     * @return <tt>true</tt> if packet logging is enabled for arbitrary
     * packets.
     */
    public boolean isArbitraryLoggingEnabled()
    {
        return this.arbitraryLoggingEnabled;
    }

    /**
     * The limit for the file size. 0 means no limit.
     * @return the file size limit.
     */
    public long getLimit()
    {
        return this.limit;
    }

    /**
     * The counter for number of files.
     * @return the number of file counts.
     */
    public int getLogfileCount()
    {
        return this.logfileCount;
    }

    /**
     * Change whether packet logging is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setGlobalLoggingEnabled(boolean enabled)
    {
        if(!enabled)
        {
            // as we are globally off, set it and to services
            this.sipLoggingEnabled = false;
            this.jabberLoggingEnabled = false;
            this.rtpLoggingEnabled = false;
            this.ice4jLoggingEnabled = false;
            this.arbitraryLoggingEnabled = false;
        }

        this.globalLoggingEnabled = enabled;
    }

    /**
     * Change whether packet logging for sip protocol is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setSipLoggingEnabled(boolean enabled)
    {
        this.sipLoggingEnabled = enabled;
    }

    /**
     * Change whether packet logging for jabber protocol is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setJabberLoggingEnabled(boolean enabled)
    {
        this.jabberLoggingEnabled = enabled;
    }

    /**
     * Change whether packet logging for RTP is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setRTPLoggingEnabled(boolean enabled)
    {
        this.rtpLoggingEnabled = true;
    }

    /**
     * Change whether packet logging for Ice4J is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setIce4JLoggingEnabled(boolean enabled)
    {
        this.ice4jLoggingEnabled = true;
    }

    /**
     * Change whether packet logging for arbitrary packets is enabled.
     * @param enabled <tt>true</tt> if we enable it.
     */
    public void setArbitraryLoggingEnabled(boolean enabled)
    {
        this.arbitraryLoggingEnabled = true;
    }

    /**
     * Changes the file size limit.
     * @param limit the new limit size.
     */
    public void setLimit(long limit)
    {
        this.limit = limit;
    }

    /**
     * Changes file count.
     * @param logfileCount the new file count.
     */
    public void setLogfileCount(int logfileCount)
    {
        this.logfileCount = logfileCount;
    }

}