namespace EVCB_OCPP.Domain.Models.Database
{

    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using System.ComponentModel.DataAnnotations.Schema;

    /// <summary>
    /// 樁的基本檔
    /// </summary>
    [Table("Machine")]
    public partial class Machine
    {
        public Machine()
        {            
            Id = Guid.NewGuid().ToString();
        }

        [Key]
        [StringLength(36)]
        public string Id { get; set; }

        /// <summary>
        /// chargePointSerialNumber
        /// </summary>
        [Index("IX_ChargePointSerialNumber", IsUnique = true)]
        [StringLength(25)]
        public string ChargePointSerialNumber { get; set; }

        /// <summary>
        /// chargeBoxSerialNumber
        /// </summary>    
        [StringLength(25)]
        public string ChargeBoxSerialNumber { get; set; }     

       

        /// <summary>
        /// chargePointModel
        /// </summary>      
        [StringLength(20)]
        public string ChargePointModel { get; set; }

        /// <summary>
        /// chargePointVendor
        /// </summary>
        [StringLength(20)]
        public string ChargePointVendor { get; set; }

        /// <summary>
        /// iccid
        /// </summary>
        [StringLength(20)]
        public string Iccid { get; set; }


        /// <summary>
        /// imsi
        /// </summary>
        [StringLength(20)]
        public string Imsi { get; set; }

        /// <summary>
        /// MeterType
        /// </summary>
        [StringLength(25)]
        public string MeterType { get; set; }

        /// <summary>
        /// meterSerialNumber
        /// </summary>
        [StringLength(25)]
        public string MeterSerialNumber { get; set; }


        /// <summary>
        /// 建立時間
        /// </summary>       
        public DateTime CreatedOn { get; set; }

        /// <summary>
        /// 建立者
        /// </summary>
        [StringLength(50)]      
        public string CreatedBy { get; set; }

        /// <summary>
        /// 描述
        /// </summary>
        [StringLength(100)]     
        public string Comment { get; set; }

        /// <summary>
        /// 客戶id
        /// </summary>      
        public Guid CustomerId { get; set; }

        /// <summary>
        /// 是否為AC電源 true為ac,false為dc
        /// </summary>
        public bool AC { get; set; }
      

        /// <summary>
        /// 充電槍個數
        /// </summary>
        public int GunAmt { get; set; }

        

        /// <summary>
        /// 心跳包更新時間
        /// </summary>
        public DateTime? HeartbeatUpdatedOn { get; set; }


     



        /// <summary>
        /// 機器回報的韌體版本編號
        /// </summary>
        public int? FW_VersionReport { get; set; }

       

      

        /// <summary>
        /// 機器被指派的韌體版本編號
        /// </summary>
        public int? FW_AssignedVersion { get; set; }
      

        /// <summary>
        /// 目前被指派更新的韌體 MachineVersion號碼
        /// </summary>
        public int? FW_AssignedMachineVersionId { get; set; }      

        /// <summary>
        /// 是否在線
        /// </summary>
        public bool Online { get; set; }

     
    

        /// <summary>
        /// 機器的模組 Ref MachineModel
        /// </summary>
        public int MachineModelId { get; set; }

        [ForeignKey("MachineModelId")]
        public virtual MachineModel MachineModel { get; set; }

        /// <summary>
        /// 客戶自訂樁號
        /// </summary>
        public int MachinePartId { get; set; }

        [ForeignKey("MachinePartId")]
        public virtual MachinePart MachinePart { get; set; }

      

        [ForeignKey("CustomerId")]
        public virtual Customer Customer { get; set; }

      

        public virtual MachineVersion FW_MachineVersion { get; set; }
      

             

     

        /// <summary>
        /// 斷網時間
        /// </summary>
        public DateTime? OfflineOn { get; set; }

        /// <summary>
        /// firmwareVersion
        /// </summary>
        [StringLength(50)]
        public string FW_CurrentVersion { get; set; }

      
    }
}