/// <reference path="./sigApi.LogLevel.d.ts" />

declare namespace SigApi {
    interface Logger {
        /**
         * Sets the log level
         * 
         * possible values:
         * * sigApi.debug.OFF 
         * * sigApi.debug.ERROR 
         * * sigApi.debug.WARN  
         * * sigApi.debug.INFO 
         * * sigApi.debug.DEBUG  
         * 
         * @param {LogLevel} level desired log level
         */
        setLogLevel(level: LogLevel): void
        /**
         * Returns the current log level, use the LogLevel.name or LogLevel.value properties for comparison
         * 
         * possible values:
         * * sigApi.debug.OFF 
         * * sigApi.debug.ERROR 
         * * sigApi.debug.WARN  
         * * sigApi.debug.INFO 
         * * sigApi.debug.DEBUG  
         * 
         * @returns {LogLevel} current log level
         */
        getLogLevel(): LogLevel
        /**
         * Configures the persisted browser log
         * 
         * Parameters are applied only, when logToFileLevel changes from sigApi.debug.OFF
         * to an active logToFileLevel
         * 
         * @param {string|undefined} logDirectory logDirectory (default: '%dsworkspace%')
         * @param {number|undefined} saveInterval saveInterval in seconds (default: 60 seconds, min. value: 10 seconds)
         * @param {number|undefined} filesCount filesCount for file rotate (default: 8, min. value: 2)
         * @param {number|undefined} fileSize fileSize in MB for file rotate (default: 64 MB, min. value: 8 MB)
         * @param {boolean|undefined} prefixTimestamp prefix a timestamp in ISO format: YYYY-MM-DDTHH:mm:ss.sssZ (default: true)
         * @param {boolean|undefined} prefixLogLevel prefix the logLevel: 'ERROR', 'WARN', 'INFO' or 'DEBUG' (default: true)
         */
        setLogToFileConfig(logDirectory?: string, saveInterval?: number, filesCount?: number, fileSize?: number, prefixTimestamp?: boolean, prefixLogLevel?: boolean): void
        /**
         * Sets the persisted browser log level
         * 
         * possible values:
         * * sigApi.debug.OFF
         * * sigApi.debug.ERROR
         * * sigApi.debug.WARN
         * * sigApi.debug.INFO
         * * sigApi.debug.DEBUG
         * 
         * @param {LogLevel} level The desired log level
         */
        setLogToFileLevel(level: LogLevel): void
        /**
         * Returns the current persisted browser log level, use the LogLevel.name or LogLevel.value properties for comparison
         * 
         * possible values:
         * * sigApi.debug.OFF
         * * sigApi.debug.ERROR
         * * sigApi.debug.WARN
         * * sigApi.debug.INFO
         * * sigApi.debug.DEBUG
         * 
         * @returns {LogLevel} The current persisted browser log level
         */
        getLogToFileLevel(): LogLevel
        /**
         * Constant for log level DEBUG 
         * 
         * @type  {LogLevel}
         */
        readonly DEBUG: LogLevel
        /**
         * Constant for log level INFO 
         * 
         * @type  {LogLevel}
         */
        readonly INFO: LogLevel
        /**
         * Constant for log level WARN 
         * 
         * @type  {LogLevel}
         */
        readonly WARN: LogLevel
        /**
         * Constant for log level ERROR 
         * 
         * @type  {LogLevel}
         */
        readonly ERROR: LogLevel
        /**
         * Constant for log level OFF 
         * 
         * @type  {LogLevel}
         */
        readonly OFF: LogLevel
        /**
         * Prints a debug message
         * 
         * @param {string} message message to print
         */
        debug(message: string): void
        /**
         * Prints an info message
         * 
         * @param {string} message message to print
         */
        info(message: string): void
        /**
         * Prints a warn message
         * 
         * @param {string} message message to print
         */
        warn(message: string): void
        /**
         * Prints an error message
         * 
         * @param {string} message message to print
         * @param {boolean} alertImmediate pass true to display the error in the alert window of the application
         */
        error(message: string, alertImmediate?: boolean): void
    }
}
