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_GOTO_HOME(bool isFirst, TimeSpan stepTime)
        {
            var funcName = "_SM_RUN_GOHOME";
            if (runStepisFirst)
            {
                VAR.BOOL[eVarBool.FLAG_NEXTSTOP_ALIGN] = false;//);
            }

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

            //충전 상태가 OFF되어야 동작하게한다
            if (_SM_RUN_CHARGE_OFF(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.alarmSoundTerm)
                {
                    PUB.Speak(Lang.전방에물체가감지되었습니다);
                    LastSpeakTime = DateTime.Now;
                }
                return false;
            }

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

                var homenode = PUB.FindByRFID(PUB.setting.NodeMAP_RFID_Home);
                if (homenode == null)
                {
                    PUB.log.Add($"홈위치의 노드맵핑(환경설정)이 없습니다");
                    PUB.sm.SetNewRunStep(ERunStep.READY);
                    return false;
                }
                PUB._virtualAGV.TargetNode = homenode;
                PUB.AddEEDB($"홈검색시작({homenode.RfidId})");
                PUB.sm.UpdateRunStepSeq();
                return false;
            }
            else if (PUB.sm.RunStepSeq == idx++)
            {
                //모션 전후진 제어
                if (UpdateMotionPositionForMark(funcName))
                {
                    PUB.AGV.AGVMoveStop(funcName);
                    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;
        }
    }
}
