using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Runtime.Serialization;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;
using AMESCoreStudio.WebApi.Models;

namespace AMESCoreStudio.WebApi.DTO.AMES
{
    /// <summary>
    /// (過站資料)BarCodeCheck Dto
    /// </summary>
    [DataContract]
    public class BarCodeCheckDto
    {
        public BarCodeCheckDto()
        {
            inputItems = new List<inputItem>();
            outfits = new List<Outfit>();
        }

        /// <summary>
        /// 工單號碼
        /// </summary>
        [DataMember]
        public string wipNo { get { return WipNo; } set { WipNo = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
        private string WipNo;

        /// <summary>
        /// 工單ID
        /// </summary>
        [DataMember]
        public int wipID { get; set; } = 0;

        /// <summary>
        /// 內部條碼
        /// </summary>
        [DataMember]
        public string barcode { get { return Barcode; } set { Barcode = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
        private string Barcode;

        /// <summary>
        /// 內部條碼ID
        /// </summary>
        [DataMember]
        public int barcodeID { get; set; } = 0;

        /// <summary>
        /// 條碼狀態 M:一般 S:維修
        /// </summary>
        [DataMember]
        public string barcodeType { get; set; } = "M";

        /// <summary>
        /// 條碼過站狀態 P:Pass F:Fail 
        /// </summary>
        [DataMember]
        public string ruleStatus { get; set; } = "P";

        /// <summary>
        /// 生產單位-製程
        /// </summary>
        [DataMember]
        public string unitNo { get; set; }

        /// <summary>
        /// 流程ID
        /// </summary>
        [DataMember]
        public int flowRule { get; set; } = 0;

        /// <summary>
        /// 作業站ID
        /// </summary>
        [DataMember]
        public int stationID { get; set; } = 0;

        /// <summary>
        /// 線別站
        /// </summary>
        [DataMember]
        public int line { get; set; } = 0;

        /// <summary>
        /// 紀錄組件或不良代碼
        /// </summary>
        [DataMember]
        public List<inputItem> inputItems { get; set; }

        /// <summary>
        /// 治具條碼
        /// </summary>
        [DataMember]
        public List<Outfit> outfits { get; set; }

        /// <summary>
        /// 出貨序號
        /// </summary>
        [DataMember]
        public string extNo { get; set; }

        /// <summary>
        /// 過站UserID
        /// </summary>
        [DataMember]
        public int userID { get; set; } = 0;

        /// <summary>
        /// 紀錄組件或不良代碼
        /// </summary>

        public class inputItem
        {
            /// <summary>
            /// 刷入類型 NG(不良) or KP(Item_No)
            /// </summary>
            [DataMember]
            public string inputType { get; set; }

            /// <summary>
            /// KP:組件料號,NG:不良代碼
            /// </summary>
            [DataMember]
            public string inputData { get { return InputData; } set { InputData = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
            private string InputData;

            /// <summary>
            /// KP:舊組件序號,NG:異常位置
            /// </summary>
            [DataMember]
            public string oldInputData { get { return OldInputData; } set { OldInputData = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
            private string OldInputData;

            /// <summary>
            /// KP:組件料號,NG:
            /// </summary>
            [DataMember]
            public string kpItemNo { get { return KpItemNo; } set { KpItemNo = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
            private string KpItemNo;
        }

        /// <summary>
        /// 治具條碼
        /// </summary>
        public class Outfit
        {
            /// <summary>
            /// 刷入治具條碼
            /// </summary>
            [DataMember]
            public string inputData { get { return InputData; } set { InputData = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
            private string InputData;
        }
    }

    public class BarCodeCheckDtoForDBData : BarCodeCheckDto
    {
        /// <summary>
        /// 料號ID
        /// </summary>
        [DataMember]
        public int item { get; set; } = 0;

        /// <summary>
        /// 料號No
        /// </summary>
        [DataMember]
        public string itemNo { get; set; } = string.Empty;

        /// <summary>
        /// Burn In 燒機完成狀態
        /// </summary>
        [DataMember]
        public bool burnIn { get; set; } = false;

        /// <summary>
        /// 工作站_測試類別
        /// </summary>
        [DataMember]
        public string stations_TestType { get; set; } = string.Empty;

        /// <summary>
        /// 工作站_工作站類別
        /// </summary>
        [DataMember]
        public string stations_TypeNo { get; set; } = string.Empty;

        /// <summary>
        /// 工作站_工作站名稱
        /// </summary>
        [DataMember]
        public string stations_Name { get; set; } = string.Empty;

        /// <summary>
        /// 生產單位_簡碼
        /// </summary>
        [DataMember]
        public string factoryUnit_UnitCode { get; set; } = string.Empty;

        /// <summary>
        /// 工單板卡資訊-錫膏代碼
        /// </summary>
        [DataMember]
        public string wipBoard_SolderPaste { get; set; } = string.Empty;

        /// <summary>
        /// 紀錄wipKp 更新長度
        /// </summary>
        [DataMember]
        public List<Models.AMES.WipKp> UpdateWipKpLenght { get; set; }
    }
}