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
    {
        public Boolean _SM_RUN_GOHOME(bool isFirst, TimeSpan stepTime)
        {
            if (runStepisFirst)
            {
                //  PUB.flag.set(EFlag.FLAG_NEXTSTOP_ALIGN, false);

                //VAR.BOOL[eVarBool.FLAG_NEXTSTOP_MARK] = false;//);
                VAR.BOOL[eVarBool.FLAG_NEXTSTOP_ALIGN] = false;//);
            }

            //220629
            //         if(PUB.flag.get(EFlag.FLAG_GO_CHAGER_TEMP))
            //{
            //             PUB.flag.set(EFlag.FLAG_GO_CHAGER_TEMP, false);
            //}

            //HW 연결오류
            if (PUB.AGV.IsOpen == false)
            {
                PUB.Result.SetResultMessage(eResult.Hardware, eECode.AGVCONN, eNextStep.ERROR);
                return false;
            }
          

            //충전 상태가 OFF되어야 동작하게한다
            if (_SM_RUN_CHGOFF(isFirst, stepTime) == false)
                return false;

            //라이더멈춤이 설정되어있다면 음성으로 알려준다 200409
            if (PUB.AGV.system1.stop_by_front_detect == true)
            {
                var tsSpeak = DateTime.Now - LastSpeakTime;
                if (tsSpeak.TotalSeconds >= PUB.setting.doorSoundTerm)
                {
                    PUB.Speak(Lang.전방에물체가감지되었습니다);
                    LastSpeakTime = DateTime.Now;
                }
                return false;
            }

            //현재 위치가 결정되어있는지 체크한다
            if (_SM_RUN_POSCHK(isFirst, stepTime) == false)
                return false;

            var idx = 1;
            if (PUB.sm.RunStepSeq == idx++)
            {
                PUB.Speak(Lang.홈으로이동합니다);

                //홈은 무조건 QC위치로 간다
                PUB.AddEEDB($"홈검색시작({PUB.Result.TargetPos})");
                PUB.Result.TargetPos = ePosition.QC;
                PUB.sm.UpdateRunStepSeq();
                return false;
            }
            else if (PUB.sm.RunStepSeq == idx++)
            {
                //모션 전후진 제어
                if (UpdateMotionPositionForMark("GOHOME"))
                {
                    PUB.AGV.AGVMoveStop("SM_RUN_GOHOME");
                    PUB.sm.UpdateRunStepSeq();
                }
                return false;
            }
            else if (PUB.sm.RunStepSeq == idx++)
            {
                //QC까지 모두 완료되었다.(완전히 정차할때까지 기다린다)
                PUB.Speak(Lang.홈검색완료, true);  
                PUB.AddEEDB($"홈검색완료({PUB.Result.TargetPos})");
                PUB.sm.UpdateRunStepSeq();
                return false;
            }

            return true;
        }
    }
}
