using Quartz;
using System;
using System.IO;
using Znyc.Admin.Commons.Enums;
using Znyc.Admin.Commons.Extend;

namespace Znyc.Admin.Commons.Helpers
{
    /// <summary>
    /// 定时任务日志文件
    /// </summary>
    public class FileQuartz
    {
        private static string _rootPath { get; set; }

        private static string _logPath { get; set; }

        /// <summary>
        /// 创建作业所在根目录及日志文件夹
        /// </summary>
        /// <returns></returns>
        public static string CreateQuartzRootPath()
        {
            if (!string.IsNullOrEmpty(_rootPath))
            {
                return _rootPath;
            }

            _rootPath = AppDomain.CurrentDomain.BaseDirectory;
            _rootPath = _rootPath.ReplacePath();
            if (!Directory.Exists(_rootPath))
            {
                Directory.CreateDirectory(_rootPath);
            }

            _rootPath = _rootPath + "Logs\\Quartz\\";
            _rootPath = _rootPath.ReplacePath();
            //生成日志文件夹
            if (!Directory.Exists(_rootPath))
            {
                Directory.CreateDirectory(_rootPath);
            }

            return _rootPath;
        }

        /// <summary>
        /// 初始化任务日志文件路径
        /// </summary>
        /// <param name="jobName">任务名称</param>
        public static void InitTaskJobLogPath(string jobName)
        {
            if (string.IsNullOrEmpty(_logPath))
            {
                CreateQuartzRootPath();
            }

            _logPath = _rootPath + jobName;
            _logPath = _logPath.ReplacePath();
            //生成日志文件夹
            if (!Directory.Exists(_logPath))
            {
                Directory.CreateDirectory(_logPath);
            }
        }

        /// <summary>
        /// 任务启动日志
        /// </summary>
        /// <param name="content"></param>
        public static void WriteStartLog(string content)
        {
            content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + content;
            if (!content.EndsWith("\r\n"))
            {
                content += "\r\n";
            }

            FileHelper.WriteFile(LogPath, "start.txt", content, true);
        }

        /// <summary>
        /// 任务操作日志
        /// </summary>
        /// <param name="jobAction"></param>
        /// <param name="trigger"></param>
        /// <param name="taskName"></param>
        /// <param name="groupName"></param>
        public static void WriteJobAction(JobAction jobAction, ITrigger trigger, string taskName, string groupName)
        {
            WriteJobAction(jobAction, taskName, groupName, trigger == null ? "未找到作业" : "OK");
        }

        /// <summary>
        /// 任务操作日志
        /// </summary>
        /// <param name="jobAction"></param>
        /// <param name="taskName"></param>
        /// <param name="groupName"></param>
        /// <param name="content"></param>
        public static void WriteJobAction(JobAction jobAction, string taskName, string groupName, string content = null)
        {
            content =
                $"{jobAction.ToString()} --  {DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")}  --分组:{groupName},作业:{taskName},消息:{content ?? "OK"}\r\n";
            FileHelper.WriteFile(LogPath, "action.txt", content, true);
        }

        /// <summary>
        /// 任务错误日志
        /// </summary>
        /// <param name="content"></param>
        public static void WriteErrorLog(string content)
        {
            content = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "," + content;
            if (!content.EndsWith("\r\n"))
            {
                content += "\r\n";
            }

            FileHelper.WriteFile(LogPath, "Error.txt", content, true);
        }

        /// <summary>
        /// 根目录
        /// </summary>
        public static string RootPath => _rootPath;

        /// <summary>
        /// 日志目录
        /// </summary>
        public static string LogPath => _logPath;
    }
}