/********************************************************************************
 *	文件名:	LogModule.cs
 *	全路径:	\Script\GlobeDefine\LogModule.cs
 *	创建人:	李嘉
 *	创建时间:2013-10-25
 *
 *	功能说明:日志模块
 *	修改记录:
*********************************************************************************/

using System;
using UnityEngine;

namespace Module.Log
{
    public class LogModule
    {
        private static void WriteLog(string msg, LOG_TYPE type)
        {
#if UNITY_EDITOR
            switch (type)
            {
                case LOG_TYPE.DEGUG_LOG:
                    Debug.Log(msg);
                    break;
                case LOG_TYPE.WARNING_LOG:
                    Debug.LogWarning(msg);
                    break;
                case LOG_TYPE.ERROR_LOG:
                    Debug.LogError(msg);
                    break;
            }
#else
            if (type == LOG_TYPE.ERROR_LOG)
                Debug.LogError(msg);
#endif
        }

        public static void ErrorLog(string fort, params object[] areges)
        {
            if (areges.Length > 0)
            {
                var msg = string.Format(fort, areges);
                WriteLog(msg, LOG_TYPE.ERROR_LOG);
            }
            else
            {
                WriteLog(fort, LOG_TYPE.ERROR_LOG);
            }
        }

        public static void WarningLog(string fort, params object[] areges)
        {
            if (areges.Length > 0)
            {
                var msg = string.Format(fort, areges);
                WriteLog(msg, LOG_TYPE.WARNING_LOG);
            }
            else
            {
                WriteLog(fort, LOG_TYPE.WARNING_LOG);
            }
        }

        public static void DebugLog(string fort, params object[] args)
        {
            if (args.Length > 0)
            {
                var msg = string.Format(fort, args);
                WriteLog(msg, LOG_TYPE.DEGUG_LOG);
            }
            else
            {
                WriteLog(fort, LOG_TYPE.DEGUG_LOG);
            }
        }

        private static void ErrorLog(string msg)
        {
            WriteLog(msg, LOG_TYPE.ERROR_LOG);
        }

        private static void WarningLog(string msg)
        {
            WriteLog(msg, LOG_TYPE.WARNING_LOG);
        }

        public static void DebugLog(string msg)
        {
            WriteLog(msg, LOG_TYPE.DEGUG_LOG);
        }

        public static void Log(string logString, string stackTrace, LogType type)
        {
            switch (type)
            {
                case LogType.Log:
                    DebugLog(logString);
                    break;
                case LogType.Warning:
                    WarningLog(logString);
                    break;
                case LogType.Error:
                    ErrorLog(logString);
                    break;
            }
        }

        /// <summary>
        ///     这个函数轻易不要用,只在打印一些调试日志时用,效率较低
        /// </summary>
        public static string ByteToString(byte[] byteData, int nStartIndex, int nCount)
        {
            var strResult = string.Empty;
            if (Application.isEditor)
            {
                if (nStartIndex < 0 || nStartIndex >= byteData.Length)
                    return strResult;

                for (var i = nStartIndex; i < nCount && i < byteData.Length; i++)
                    strResult += Convert.ToString(byteData[i]);
            }

            return strResult;
        }

        /*
        const string ERRORLOG = "./error_{0}.log";
        const string DEBUGLOG = "./debug_{0}.log";
        const string WARNINGLOG = "./warning_{0}.log";
        */
        private enum LOG_TYPE
        {
            DEGUG_LOG = 0,
            WARNING_LOG,
            ERROR_LOG
        }
    }
}