using Aitex.Core.RT.Device;
using Aitex.Core.RT.Log;
using PunkHPX8_RT.Devices.AXIS;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace PunkHPX8_RT.Devices.SRD
{
    public class SrdRotationAxisInterLock : IAxisInterLock
    {
        #region 内部变量
        private JetAxisBase _axis;
        #endregion
        #region 属性
        /// 
        /// 模块名称
        /// 
        public string Module { get { return _axis.Module; } }
        /// 
        /// 子模块名称
        /// 
        public string Name { get { return _axis.Name; } }
        #endregion
        /// 
        /// 构造函数
        /// 
        /// 
        /// 
        public SrdRotationAxisInterLock(JetAxisBase axis)
        {
            _axis = axis;
        }
        public bool CheckGotoPosition(string station)
        {
            if (!_axis.IsHomed)
            {
                LOG.WriteLog(eEvent.ERR_PUF, Module, "axis is not home, Cannot execute GotoSavedPosition");
                return false;
            }
            if (!_axis.IsSwitchOn)
            {
                LOG.WriteLog(eEvent.ERR_PUF, Module, "axis is switch off, Cannot execute GotoSavedPosition");
                return false;
            }
            SrdCommonDevice common = DEVICE.GetDevice($"{Module}.Common");
            if(!common.CommonData.DoorClosed)
            {
                LOG.WriteLog(eEvent.ERR_SRD, Module, "Door is not closed,Rotation can not position");
                return false;
            }
            //Check Flippers
            if (common.CommonData.FlippersIn150 || common.CommonData.FlippersIn200) //|| _srdCommon.CommonData.FlippersIn100
            {
                LOG.WriteLog(eEvent.ERR_SRD, Module,"FlippersIn is on");
                return false;
            }
            if (!common.CommonData.Flipper1Out150Status || !common.CommonData.Flipper2Out150Status || !common.CommonData.Flipper3Out150Status
                || !common.CommonData.Flipper1Out200Status || !common.CommonData.Flipper2Out200Status || !common.CommonData.Flipper3Out200Status)
            //|| !_srdCommon.CommonData.Flipper1Out100Status || !_srdCommon.CommonData.Flipper2Out100Status || !_srdCommon.CommonData.Flipper3Out100Status
            {
                LOG.WriteLog(eEvent.ERR_SRD, Module,"Flippers are at In position");
                return false;
            }
            return true;
        }
    }
}