using FLY.Thick.RemoteHistory;
using FObjBase;
using SQLite;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FLY.OBJComponents.Common
{

    public class FlyData_WarningHistory : IFlyData,IDbBase
    {
        public Int64 ID { get; set; }
        /// <summary>
        /// 时间
        /// </summary>
        public DateTime Time { get; set; }

        /// <summary>
        /// 出错码
        /// </summary>
        public int ErrCode { get; set; }
        /// <summary>
        /// 出错状态
        /// </summary>
        public ERR_STATE State { get; set; }
        /// <summary>
        /// 描述
        /// </summary>
        public string Description { get; set; }
        /// <summary>
        /// 附加信息， json格式
        /// </summary>
        public string Accessory { get; set; }

        /// <summary>
        /// 可以被复位
        /// </summary>
        public bool CanReset { get; set; } = true;


        public FlyData_WarningHistory Clone()
        {
            return new FlyData_WarningHistory()
            {
                Time = Time,
                ErrCode = ErrCode,
                State = State,
                Description = Description
            };
        }
        public string GetHeader()
        {
            return "时间,出错码,状态,描述";
        }

        public bool TryParse(string header, string str)
        {
            string[] items = str.Split(new char[] { ',' });
            if (items.Length < 4)
                return false;
            DateTime dt;
            if (DateTime.TryParse(items[0], out dt))
                Time = dt;
            else
                return false;
            int b;

            if (int.TryParse(items[1], out b))
                ErrCode = b;
            else
                return false;
            ERR_STATE state;
            if (Enum.TryParse<ERR_STATE>(items[2], out state))
                State = state;
            else
                return false;
            Description = items[3];



            return true;
        }

        public override string ToString()
        {
            string str;
            str = Time.ToString();
            str += "," + ErrCode.ToString();
            str += "," + State.ToString();
            str += "," + Description;
            return str;
        }
    }

    /// <summary>
    /// 报警状态
    /// </summary>
    public enum ERR_STATE
    {
        /// <summary>
        /// 报警中
        /// </summary>
        ON,
        /// <summary>
        /// 关闭
        /// </summary>
        OFF
    }

    /// <summary>
    /// 出错类型
    /// </summary>
    public struct ERRNO
    {
        public UInt16 Code;
        public string Descrption;
    }

    public class PlcErrNos
    {
        public static PlcErrNos Instance { get; } = new PlcErrNos();

        /// <summary>
        /// PLC连接断开
        /// </summary>
        public ERRNO ERRNO_PLC_DISCONNECTED = new ERRNO() { Code = 65535, Descrption = "PLC连接断开" };
    }
}
