using Aitex.Core.RT.Log;
using Aitex.Core.RT.Routine;
using Aitex.Core.RT.SCCore;

namespace SicModules.TMs.Routines
{
    public class TMHomeRoutine : TMBaseRoutine
    {
        enum RoutineStep
        {
            CloseV77, 
            CloseV70,
            CloseV80,
            CloseV85,
            TMRobotHome
        }

        private int _homeTimeout;

        private TMRobotHomeRoutine _tmRobotHomeRoutine =
             new TMRobotHomeRoutine();

        public TMHomeRoutine()
        {
            Module = "TM";
            Name = "Home";
        }


        public override Result Start(params object[] objs)
        {
            Reset();

            _homeTimeout = SC.GetValue<int>("TM.HomeTimeout");

            _tmRobotHomeRoutine = new TMRobotHomeRoutine();

            Notify("Start");

            return Result.RUN;
        }

        public override Result Monitor()
        {
            try
            {
                //关闭 V77， V78； 关闭 V85；关闭 V70-1， V70-2； Home Robot, Check Load
                CloseTMVent((int)RoutineStep.CloseV77);
                //没有V78
                SetTMLLBalanceValve((int)RoutineStep.CloseV85, TMDevice,false);
                ClosePM1ToTMV70((int)RoutineStep.CloseV70);
                ExecuteRoutine((int)RoutineStep.TMRobotHome, _tmRobotHomeRoutine);
            }
            catch (RoutineBreakException)
            {
                return Result.RUN;
            }
            catch (RoutineFaildException ex)
            {
                LOG.Error(ex.ToString());
                return Result.FAIL;
            }

            Notify("Finished");

            return Result.DONE;
        }

        public override  void Abort()
        {
            base.Abort();
        }

    }
}
