using FreeSql.DataAnnotations;
using JiShe.CollectBus.Common.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace JiShe.CollectBus.IotSystems.Ammeters
{
    public class AmmeterInfo: DeviceCacheBasicModel
    {
        /// <summary>
        /// 关系映射标识，用于ZSet的Member字段和Set的Value字段，具体值可以根据不同业务场景进行定义
        /// </summary>
        [Column(IsIgnore = true)]
        public override string MemberId => $"{FocusAddress}:{MeteringCode}";

        /// <summary>
        /// ZSet排序索引分数值，具体值可以根据不同业务场景进行定义，例如时间戳
        /// </summary>
        [Column(IsIgnore = true)]
        public override long ScoreValue => ((long)FocusId << 32) | (uint)DateTime.Now.Ticks;

        /// <summary>
        /// 电表名称
        /// </summary>
        public string Name { get; set; }
  
        /// <summary>
        /// 集中器地址
        /// </summary>
        public string Address { get; set; }

        /// <summary>
        /// 集中器区域代码
        /// </summary>
        public string AreaCode { get; set; }

        /// <summary>
        /// 电表类别 （1单相、2三相三线、3三相四线）,
        /// 07协议： 开合闸指令(1A开闸断电,1C单相表合闸,1B多相表合闸)  645 2007 表
        /// 97协议：//true(合闸);false(跳闸)  545 1997 没有单相多相  之分  "true" ? "9966" : "3355"
        /// </summary>		
        public int TypeName { get; set; }

        /// <summary>
        /// 跳合闸状态字段：  0 合闸，1 跳闸
        /// 电表：TripState （0 合闸-通电, 1 断开、跳闸）；
        /// </summary>
        public int TripState { get; set; }

        /// <summary>
        /// 规约  -电表default(30) 1：97协议，30：07协议
        /// </summary>
        public int? Protocol { get; set; }

        /// <summary>
        /// 一个集中器下的[MeteringCode]必须唯一。 PN
        /// </summary>
        public int MeteringCode { get; set; }

        /// <summary>
        /// 电表通信地址
        /// </summary>
        public string AmmerterAddress { get; set; }

        /// <summary>
        /// 波特率 default(2400)
        /// </summary>
        public int Baudrate { get; set; }

        /// <summary>
        ///  MeteringPort 端口就几个可以枚举。
        /// </summary>
        public int MeteringPort { get; set; }

        /// <summary>
        /// 电表密码
        /// </summary>		
        public string Password { get; set; }

        /// <summary>
        /// 采集时间间隔(分钟，如15)
        /// </summary>
        public int TimeDensity { get; set; }

        /// <summary>
        /// 该电表方案下采集项，JSON格式，如：["0D_80","0D_80"]
        /// </summary>
        public string ItemCodes { get; set; }

        /// <summary>        
        /// State表状态: 
        /// 0新装（未下发），1运行(档案下发成功时设置状态值1)， 2暂停, 100销表（销表后是否重新启用）
        /// 特定：State   -1 已删除
        /// </summary>		
        public int State { get; set; }

        /// <summary>
        /// 是否自动采集(0:主动采集，1：自动采集)
        /// </summary>
        public int AutomaticReport { get; set; }

        /// <summary>
        /// 该电表方案下采集项编号
        /// </summary>
        public string DataTypes { get; set; }

        /// <summary>
        /// 品牌型号
        /// </summary>
        public string BrandType { get; set; }

        /// <summary>
        /// 采集器编号
        /// </summary>
        public string GatherCode { get; set; }

        /// <summary>
        /// 是否特殊表，1是特殊电表
        /// </summary>
        public int Special { get; set; }

        /// <summary>
        /// 费率类型，单、多   (SingleRate :单费率（单相表1），多费率（其他0） ，与TypeName字段无关)  
        /// SingleRate ? "单" : "复"  
        /// [SingleRate]  --0 复费率 false ， 1 单费率 true   （与PayPlanID保持一致）
        ///对应 TB_PayPlan.Type: 1复费率，2单费率
        /// </summary>
        public bool SingleRate { get; set; }

        /// <summary>
        /// 项目ID
        /// </summary>
        public int ProjectID { get; set; }

        /// <summary>
        /// 数据库业务ID
        /// </summary>
        public int DatabaseBusiID { get; set; }

        /// <summary>
        /// 是否异常集中器 0:正常，1异常
        /// </summary>
        public int AbnormalState { get; set; }

        public DateTime LastTime { get; set; } 
    }
}
