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

namespace Project
{
    public partial class fMain
    {
        public Boolean _SM_RUN_READY(bool isFirst, TimeSpan stepTime)
        {
            ////이동 불가 조건이 걸려있다면 충전을 하지 못하게 한다.
            //Boolean bAutoChageOn = true;
            //if (PUB.AGV.system1.stop_by_front_detect) bAutoChageOn = false;
            //else if (PUB.AGV.error.Emergency) bAutoChageOn = false;
            //else if (VAR.BOOL[eVarBool.FLAG_CHARGEONA]) bAutoChageOn = false;
            //else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM]) bAutoChageOn = false;


            //자동 충전 중이라면 최대 충전시간과 레벨을 체크한다            
            if (VAR.BOOL[eVarBool.FLAG_CHARGEONA] == true)
            {
                if (VAR.TIME.IsSet(eVarTime.ChargeStart) == false)
                    VAR.TIME.Update(eVarTime.ChargeStart);

                //충전중이라면 최대 충전 시간을 체크한다.
                var tsChargeRunTime = VAR.TIME.RUN(eVarTime.ChargeStart);
                if (PUB.BMS.BMSInformation.rsoc >= PUB.setting.ChargeMaxLevel)
                {
                    PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
                    PUB.sm.ClearRunStep();
                    PUB.sm.SetNewRunStep(ERunStep.CHARGEOFF);
                    PUB.sm.SetNewStep(eSMStep.RUN);
                    PUB.log.Add($"최대충전레벨 OVER로 인한 자동 해제(레벨:{PUB.setting.ChargeMaxLevel})");
                    PUB.AddEEDB($"최대충전레벨 OVER로 인한 자동 해제(레벨:{PUB.setting.ChargeMaxLevel})");
                    PUB.Speak(Lang.충전완료로해제합니다);
                }
                else if (PUB.setting.ChargeMaxTime > 1 && tsChargeRunTime.TotalSeconds >= PUB.setting.ChargeMaxTime)
                {
                    PUB.AGV.AGVCharge(PUB.setting.ChargerID, false);
                    PUB.sm.ClearRunStep();
                    PUB.sm.SetNewRunStep(ERunStep.CHARGEOFF);
                    PUB.sm.SetNewStep(eSMStep.RUN);
                    PUB.log.Add($"최대충전시간 OVER로 인한 자동 해제(시간:{PUB.setting.ChargeMaxTime})");
                    PUB.AddEEDB($"최대충전시간 OVER로 인한 자동 해제(시간:{PUB.setting.ChargeMaxTime})");
                    PUB.Speak(Lang.충전완료로해제합니다);
                }
                VAR.STR[eVarString.ChargeCheckMsg] = "자동 충전 중";
            }
            else if (VAR.BOOL[eVarBool.FLAG_CHARGEONM] == true)
            {
                if (VAR.TIME.IsSet(eVarTime.ChargeStart) == false)
                    VAR.TIME.Update(eVarTime.ChargeStart);
                VAR.STR[eVarString.ChargeCheckMsg] = "수동 충전";
            }

            //대기모드에서는 움직이지 않게 한다
            if (PUB.AGV.system1.agv_run)
            {
                var ts = VAR.TIME.RUN(eVarTime.IdleStopTime);
                if (ts.TotalSeconds > 1)
                {
                    PUB.log.Add($"대기상태에서는 정차");
                    PUB.AGV.AGVMoveStop("대기상태에서는 정차");
                    VAR.TIME.Update(eVarTime.IdleStopTime);
                }
            }

            return false;

        }
    }
}
