using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Runtime.Serialization;

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 { return ExtNo; } set { ExtNo = string.IsNullOrWhiteSpace(value) ? "" : value.Trim().ToUpper(); } }
        private string ExtNo;

        /// <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;
        }
    }
}