using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Project.Class
{
    public class JobData
    {
        public enum ErrorCode
        {
            None = 0,
            BarcodeRead,
            Print,
            Camera,
        }
        public ErrorCode error = ErrorCode.None;
        public int No { get; set; }
        public VisionData VisionData;

        public DateTime JobStart
        {
            get
            {
                if (this.VisionData == null) return new DateTime(1982, 11, 23);
                else return VisionData.STime;
            }
        }
        public DateTime JobEnd;
        public TimeSpan JobRun
        {
            get
            {
                if (JobEnd.Year == 1982) return new TimeSpan(0);
                else if (JobStart.Year == 1982) return new TimeSpan(0);
                else return JobEnd - JobStart;
            }
        }

        /// <summary>
        /// 프린터에 명령을 전송한 시간
        /// </summary>
        public DateTime PrintTime { get; set; }

        /// <summary>
        /// 라벨을 추가한 시간
        /// </summary>
        public DateTime Attachtime { get; set; }

        //작업데이터의 GUID(자료식별)
        public string guid { get; private set; }

        //언로더포트위치(L/R)
        public string PortPos;


        //동작관련 메세지
        public string Message;

        int idx;



        public JobData(int idx_)
        {
            this.idx = idx_;
            Clear("INIT");
        }

        public bool PrintAttach { get; set; }
        public bool PrintQRValid { get; set; }
        public string PrintQRValidResult { get; set; }
        public void Clear(string source)
        {


            No = 0;
            //JobStart = new DateTime(1982, 11, 23);
            JobEnd = new DateTime(1982, 11, 23);
            Attachtime = new DateTime(1982, 11, 23);
            PortPos = string.Empty;
            guid = Guid.NewGuid().ToString();
            Message = string.Empty;
            if (VisionData == null)
                VisionData = new VisionData(source);
            else
                VisionData.Clear(source, false);
            PrintAttach = false;
            PrintQRValid = false;
            PrintQRValidResult = string.Empty;
            PrintTime = new DateTime(1982, 11, 23);
            PUB.AddDebugLog($"item data {idx} clear by {source} guid={guid}");
        }

        public void CopyTo(ref JobData obj)
        {
            if (obj == null) return;
            obj.No = this.No;
            obj.error = this.error;
            obj.JobEnd = this.JobEnd;
            obj.guid = this.guid;
            obj.PortPos = this.PortPos;
            obj.Message = this.Message;
            obj.PrintAttach = this.PrintAttach;
            obj.PrintQRValid = this.PrintQRValid;
            obj.PrintQRValidResult = this.PrintQRValidResult;
            obj.Attachtime = this.Attachtime;
            obj.PrintTime = this.PrintTime;
            PUB.AddDebugLog("Before item copy rid:" + this.VisionData.RID);
            this.VisionData.CopyTo(ref obj.VisionData);
            PUB.AddDebugLog($"After item copy target rid : {obj.VisionData.RID}, guid={obj.guid}");
        }


    }
}
