using System;
using Aitex.Core.RT.Routine;
using Venus_RT.Devices;
using MECF.Framework.Common.Routine;
using Venus_Core;
namespace Venus_RT.Modules.PMs
{
    class PMHomeRoutine : PMRoutineBase, IRoutine
    {
        enum RoutineStep
        {
            Home,
            End,
        }
        public PMHomeRoutine(JetPMBase chamber) : base(chamber)
        {
            Name = "PM Home";
        }

        public RState Init()
        {
            return RState.End;
        }

        public RState Start(params object[] objs)
        {
            Reset();
            return Runner.Start(Module, Name);
        }

        public RState Monitor()
        {
            Runner.Run(RoutineStep.Home, HOFs.WrapAction(_chamber.Home), IsHomed, 50000)
            .End(RoutineStep.End, () => { return true; });

            return Runner.Status;

        }

        public void Abort()
        {

        }

        private bool IsHomed()
        {
            if (_chamber.ChamberType == JetChamber.Venus || _chamber.ChamberType == JetChamber.Kepler2300)
            {
                return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down && _chamber.PVN22ValveIsOpen;

            }
            else if (_chamber.ChamberType == JetChamber.Kepler2200A || _chamber.ChamberType == JetChamber.Kepler2200B)
            {
                return _chamber.IsSlitDoorClosed && _chamber.PVN22ValveIsOpen;

            }
            else if(_chamber.ChamberType == JetChamber.VenusSE || _chamber.ChamberType == JetChamber.VenusDE) 
            {
                return _chamber.IsSlitDoorClosed && _chamber.LiftPinPosition == Venus_Core.MovementPosition.Down;
            }
            return false;
        }
    }
}