using MediaBrowser.Model.Logging;
using ServiceStack.Logging;
using System;
namespace MediaBrowser.Server.Implementations.HttpServer
{
    /// 
    /// Class ServerLogger
    /// 
    public class ServerLogger : ILog
    {
        /// 
        /// The _logger
        /// 
        private readonly ILogger _logger;
        /// 
        /// Initializes a new instance of the  class.
        /// 
        /// The logger.
        public ServerLogger(ILogger logger)
        {
            _logger = logger;
        }
        /// 
        /// Logs a Debug message and exception.
        /// 
        /// The message.
        /// The exception.
        public void Debug(object message, Exception exception)
        {
            _logger.ErrorException(GetMesssage(message), exception);
        }
        /// 
        /// Logs a Debug message.
        /// 
        /// The message.
        public void Debug(object message)
        {
            // Way too verbose. Can always make this configurable if needed again.
            //_logger.Debug(GetMesssage(message));
        }
        /// 
        /// Logs a Debug format message.
        /// 
        /// The format.
        /// The args.
        public void DebugFormat(string format, params object[] args)
        {
            // Way too verbose. Can always make this configurable if needed again.
            //_logger.Debug(format, args);
        }
        /// 
        /// Logs a Error message and exception.
        /// 
        /// The message.
        /// The exception.
        public void Error(object message, Exception exception)
        {
            _logger.ErrorException(GetMesssage(message), exception);
        }
        /// 
        /// Logs a Error message.
        /// 
        /// The message.
        public void Error(object message)
        {
            _logger.Error(GetMesssage(message));
        }
        /// 
        /// Logs a Error format message.
        /// 
        /// The format.
        /// The args.
        public void ErrorFormat(string format, params object[] args)
        {
            _logger.Error(format, args);
        }
        /// 
        /// Logs a Fatal message and exception.
        /// 
        /// The message.
        /// The exception.
        public void Fatal(object message, Exception exception)
        {
            _logger.FatalException(GetMesssage(message), exception);
        }
        /// 
        /// Logs a Fatal message.
        /// 
        /// The message.
        public void Fatal(object message)
        {
            _logger.Fatal(GetMesssage(message));
        }
        /// 
        /// Logs a Error format message.
        /// 
        /// The format.
        /// The args.
        public void FatalFormat(string format, params object[] args)
        {
            _logger.Fatal(format, args);
        }
        /// 
        /// Logs an Info message and exception.
        /// 
        /// The message.
        /// The exception.
        public void Info(object message, Exception exception)
        {
            _logger.ErrorException(GetMesssage(message), exception);
        }
        /// 
        /// Logs an Info message and exception.
        /// 
        /// The message.
        public void Info(object message)
        {
            _logger.Info(GetMesssage(message));
        }
        /// 
        /// Logs an Info format message.
        /// 
        /// The format.
        /// The args.
        public void InfoFormat(string format, params object[] args)
        {
            _logger.Info(format, args);
        }
        /// 
        /// Gets or sets a value indicating whether this instance is debug enabled.
        /// 
        /// true if this instance is debug enabled; otherwise, false.
        public bool IsDebugEnabled
        {
            get { return true; }
        }
        /// 
        /// Logs a Warning message and exception.
        /// 
        /// The message.
        /// The exception.
        public void Warn(object message, Exception exception)
        {
            _logger.ErrorException(GetMesssage(message), exception);
        }
        /// 
        /// Logs a Warning message.
        /// 
        /// The message.
        public void Warn(object message)
        {
            // Hide StringMapTypeDeserializer messages
            // _logger.Warn(GetMesssage(message));
        }
        /// 
        /// Logs a Warning format message.
        /// 
        /// The format.
        /// The args.
        public void WarnFormat(string format, params object[] args)
        {
            // Hide StringMapTypeDeserializer messages
            // _logger.Warn(format, args);
        }
        /// 
        /// Gets the messsage.
        /// 
        /// The o.
        /// System.String.
        private string GetMesssage(object o)
        {
            return o == null ? string.Empty : o.ToString();
        }
    }
}