using System;
using System.Collections.Generic;
using System.Drawing;
using System.Linq;
using System.Text;
using Project.StateMachine;
using COMM;
using AR;

namespace Project
{
    public partial class fMain
    {

        /// <summary>
        /// 충전시퀀스를 모두 해제하고 본래위치로 이동한다.
        /// </summary>
        /// <param name="isFirst"></param>
        /// <param name="stepTime"></param>
        /// <returns></returns>
        public Boolean _SM_RUN_CHARGE_OFF(bool isFirst, TimeSpan stepTime)
        {
          
            //충전중인지 확인한다.
            if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true || PUB.AGV.system1.Battery_charging == true)
            {
                if (isFirst)
                {
                    VAR.TIME.Update(eVarTime.ChargeEnd);
                    if (VAR.BOOL[eVarBool.FLAG_CHARGEONA])
                    {
                        PUB.Speak(Lang.충전을해제합니다);
                    }
                }
                
                //AGV는 충전을 해제한 상태이다
                if (PUB.AGV.system1.Battery_charging == false)
                {
                    //너무빨리 처리되지 않도록 5초후에 완료 처리를 한다
                    var ts1 = VAR.TIME.RUN(eVarTime.ChargeEnd);
                    var ts2 = VAR.TIME.RUN(eVarTime.SendChargeOff);
                    if (ts1.TotalSeconds >= 5 && ts2.TotalSeconds > 5) VAR.BOOL[eVarBool.FLAG_CHARGEONA] = false;
                }
                else
                {
                    //OFF전송이 처음이라면 시간 설정
                    if (VAR.TIME.IsSet(eVarTime.SendChargeOff)==false)
                        VAR.TIME[eVarTime.SendChargeOff] = DateTime.Now.AddSeconds(-10);

                    var tsChgOff = VAR.TIME.RUN(eVarTime.SendChargeOff);
                    if (tsChgOff.TotalSeconds >= 3)
                    {
                        PUB.log.Add("충전 해제 전송");
                        PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
                        VAR.TIME.Update(eVarTime.SendChargeOff);
                    }


                    // 1분 타임아웃 체크
                    if (stepTime.TotalMinutes >= 1)
                    {
                        PUB.XBE.ErrorMessage = $"충전해제가 실패되었습니다(1분)";
                        PUB.log.AddE(PUB.XBE.ErrorMessage);
                        PUB.sm.SetNewStep(eSMStep.IDLE);
                        return false;
                    }

                }
                return false;
            }
            else
            {
                //중전이 해제된 상태이다
                return true;
            }
        }
    }
}
