using MadRunFabric.Common;
using MongoDB.Bson.Serialization.Attributes;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Text;

namespace MadRunFabric.Model.HangfireApi.Model
{
    /// <summary>
    /// 任务计划表
    /// </summary>
    [BsonIgnoreExtraElements]
    public class HangfirePlan : IBaseModel<string>
    {
        /// <summary>
        /// id
        /// </summary>
        [Key]
        [BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
        public string id { get; set; }
        /// <summary>
        /// 项目名称id
        /// </summary>
        [BsonRepresentation(MongoDB.Bson.BsonType.ObjectId)]
        public string projectid { get; set; }
        /// <summary>
        /// 工单类型 1报修，2保养，3巡检
        /// </summary>
        public int wotype { get; set; } = 0;
        /// <summary>
        /// 计划类型：1定时任务，2临时任务，3超时任务
        /// </summary>
        public int plantype { get; set; } = 0;
        /// <summary>
        /// 定时任务周期：1年，2月，3周，4日，5时，6分 
        /// 超时任务周期：5时，6分
        /// </summary>
        public int plancycle { get; set; } = 0;

        /// <summary>
        /// 执行间隔
        /// </summary>
        public int planinterval { get; set; } = 0;
        /// <summary>
        /// 执行频率
        /// </summary>
        public int plantimes { get; set; } = 0;

        /// <summary>
        /// 计划状态 0开始 1结束 2挂起
        /// </summary>
        public int planstate { get; set; } = 0;

        /// <summary>
        /// 自定义时间段
        /// </summary>
        public List<ExtensionTimeModel> extensiontime { get; set; } = null;

        public string createby { get; set; } = "";
        /// <summary>
        /// 提交时间
        /// </summary>
        public DateTime createtime { get; set; }
        /// <summary>
        /// 是否删除
        /// </summary>
        public int isdelete { get; set; } = 0;
        #region
        ///// <summary>
        ///// 工单类型 1报修，2保养，3巡检
        ///// </summary>
        //public int wotype { get; set; } = 0;
        ///// <summary>
        ///// 计划类型：1定时任务，2临时任务，3超时任务
        ///// </summary>
        //public int plantype { get; set; } = 0;

        ///// <summary>
        ///// 定时任务周期：1年，2月，3周，4日，5时，6分 
        ///// 超时任务周期：5时，6分
        ///// </summary>
        //public int plancycle { get; set; } = 0;

        //#region 定时任务

        ///// <summary>
        ///// 执行计划日：如每周第几天，每月第几天
        ///// </summary>
        //public int plandate { get; set; } = 0;

        ///// <summary>
        ///// 执行计划时间：几点执行
        ///// 0-23
        ///// </summary>
        //public int planhour { get; set; } = 0;
        //#endregion
        //#region 超时任务
        ///// <summary>
        ///// 计划间隔秒数（0-59）
        ///// </summary>
        //public int planinterval { get; set; } = 0;
        //#endregion

        ///// <summary>
        ///// 计划状态 0开始 1结束 2挂起
        ///// </summary>
        //public int planstate { get; set; } = 0;

        ///// <summary>
        ///// 开始执行时间
        ///// </summary>
        //public DateTime planstart { get; set; }
        ///// <summary>
        ///// 计划结束时间
        ///// </summary>
        //public DateTime planend { get; set; }

        //public string createby { get; set; } = "";
        ///// <summary>
        ///// 提交时间
        ///// </summary>
        //public DateTime createtime { get; set; }
        ///// <summary>
        ///// 是否删除
        ///// </summary>
        //public int isdelete { get; set; } = 0;
        #endregion
    }

    /// <summary>
    /// 计划类型：1定时任务，2临时任务，3超时任务
    /// </summary>
    public enum EnumPlanType
    {
        timing = 1,
        temporary = 2,
        timeout = 3
    }

    /// <summary>
    /// 任务周期：1年，2月，3周，4日，5时，6分
    /// </summary>
    public enum EnumPlanCycle
    {
        yearly = 1,
        monthly = 2,
        weekly = 3,
        darly = 4,
        hourly = 5,
        minutely = 6
    }

    /// <summary>
    /// 计划状态 0开始 1结束 2挂起
    /// </summary>
    public enum EnumPlanState
    {
        start = 0,
        end = 1,
        hangup = 2
    }

}
