using Aitex.Core.RT.Log;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.ToolLayout;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CyberX8_Themes.UserControls
{
    /// 
    /// UTransporterDebugControl.xaml 的交互逻辑
    /// 
    public partial class TransporterDebugControl : UserControl
    {
        #region 属性
        public static readonly DependencyProperty ModuleTitleProperty = DependencyProperty.Register("ModuleTitle", typeof(string), typeof(TransporterDebugControl),
          new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 模块标题
        /// 
        public string ModuleTitle
        {
            get
            {
                return (string)this.GetValue(ModuleTitleProperty);
            }
            set
            {
                this.SetValue(ModuleTitleProperty, value);
            }
        }
        public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register("ModuleName", typeof(string), typeof(TransporterDebugControl),
          new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 模块名称
        /// 
        public string ModuleName
        {
            get
            {
                return (string)this.GetValue(ModuleNameProperty);
            }
            set
            {
                this.SetValue(ModuleNameProperty, value);
            }
        }
        public static readonly DependencyProperty BarcodeReaderDeviceNameProperty = DependencyProperty.Register("BarcodeReaderDeviceName", typeof(string), typeof(TransporterDebugControl),
                new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 读码器名称
        /// 
        public string BarcodeReaderDeviceName
        {
            get
            {
                return (string)this.GetValue(BarcodeReaderDeviceNameProperty);
            }
            set
            {
                this.SetValue(BarcodeReaderDeviceNameProperty, value);
            }
        }
        public static readonly DependencyProperty Lock1OnProperty = DependencyProperty.Register("Lock1On", typeof(bool), typeof(TransporterDebugControl),
          new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Lock 1 On
        /// 
        public bool Lock1On
        {
            get
            {
                return (bool)this.GetValue(Lock1OnProperty);
            }
            set
            {
                this.SetValue(Lock1OnProperty, value);
            }
        }
        public static readonly DependencyProperty Lock2OnProperty = DependencyProperty.Register("Lock2On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Lock 2 On
        /// 
        public bool Lock2On
        {
            get
            {
                return (bool)this.GetValue(Lock2OnProperty);
            }
            set
            {
                this.SetValue(Lock2OnProperty, value);
            }
        }
        public static readonly DependencyProperty Unlock1OnProperty = DependencyProperty.Register("Unlock1On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// UnLock 2 On
        /// 
        public bool Unlock1On
        {
            get
            {
                return (bool)this.GetValue(Unlock1OnProperty);
            }
            set
            {
                this.SetValue(Unlock1OnProperty, value);
            }
        }
        public static readonly DependencyProperty Unlock2OnProperty = DependencyProperty.Register("Unlock2On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// UnLock 2 On
        /// 
        public bool Unlock2On
        {
            get
            {
                return (bool)this.GetValue(Unlock2OnProperty);
            }
            set
            {
                this.SetValue(Unlock2OnProperty, value);
            }
        }
        public static readonly DependencyProperty Retract1OnProperty = DependencyProperty.Register("Retract1On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Retract 1 On
        /// 
        public bool Retract1On
        {
            get
            {
                return (bool)this.GetValue(Retract1OnProperty);
            }
            set
            {
                this.SetValue(Retract1OnProperty, value);
            }
        }
        public static readonly DependencyProperty Retract2OnProperty = DependencyProperty.Register("Retract2On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Retract 2 On
        /// 
        public bool Retract2On
        {
            get
            {
                return (bool)this.GetValue(Retract2OnProperty);
            }
            set
            {
                this.SetValue(Retract2OnProperty, value);
            }
        }
        public static readonly DependencyProperty Extend1OnProperty = DependencyProperty.Register("Extend1On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Extend 1 On
        /// 
        public bool Extend1On
        {
            get
            {
                return (bool)this.GetValue(Extend1OnProperty);
            }
            set
            {
                this.SetValue(Extend1OnProperty, value);
            }
        }
        public static readonly DependencyProperty Extend2OnProperty = DependencyProperty.Register("Extend2On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Extend 2 On
        /// 
        public bool Extend2On
        {
            get
            {
                return (bool)this.GetValue(Extend2OnProperty);
            }
            set
            {
                this.SetValue(Extend2OnProperty, value);
            }
        }
        public static readonly DependencyProperty ReadyToLock1OnProperty = DependencyProperty.Register("ReadyToLock1On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Reay To Lock 1 On
        /// 
        public bool ReadyToLock1On
        {
            get
            {
                return (bool)this.GetValue(ReadyToLock1OnProperty);
            }
            set
            {
                this.SetValue(ReadyToLock1OnProperty, value);
            }
        }
        public static readonly DependencyProperty ReadyToLock2OnProperty = DependencyProperty.Register("ReadyToLock2On", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Ready To Lock 2 On
        /// 
        public bool ReadyToLock2On
        {
            get
            {
                return (bool)this.GetValue(ReadyToLock2OnProperty);
            }
            set
            {
                this.SetValue(ReadyToLock2OnProperty, value);
            }
        }
        public static readonly DependencyProperty WHPresent1Property = DependencyProperty.Register("WHPresent1", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// WH Present 1
        /// 
        public bool WHPresent1
        {
            get
            {
                return (bool)this.GetValue(WHPresent1Property);
            }
            set
            {
                this.SetValue(WHPresent1Property, value);
            }
        }
        public static readonly DependencyProperty WHPresent2Property = DependencyProperty.Register("WHPresent2", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// WH Present 2
        /// 
        public bool WHPresent2
        {
            get
            {
                return (bool)this.GetValue(WHPresent2Property);
            }
            set
            {
                this.SetValue(WHPresent2Property, value);
            }
        }
        public static readonly DependencyProperty GantryMotorOnProperty = DependencyProperty.Register("GantryMotorOn", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Gantry Motor On
        /// 
        public bool GantryMotorOn
        {
            get
            {
                return (bool)this.GetValue(GantryMotorOnProperty);
            }
            set
            {
                this.SetValue(GantryMotorOnProperty, value);
            }
        }
        public static readonly DependencyProperty ElevatorMotorOnProperty = DependencyProperty.Register("ElevatorMotorOn", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Elevator Motor On
        /// 
        public bool ElevatorMotorOn
        {
            get
            {
                return (bool)this.GetValue(ElevatorMotorOnProperty);
            }
            set
            {
                this.SetValue(ElevatorMotorOnProperty, value);
            }
        }
        public static readonly DependencyProperty GantryHomedProperty = DependencyProperty.Register("GantryHomed", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Gantry Homed
        /// 
        public bool GantryHomed
        {
            get
            {
                return (bool)this.GetValue(GantryHomedProperty);
            }
            set
            {
                this.SetValue(GantryHomedProperty, value);
            }
        }
        public static readonly DependencyProperty ElevatorHomedProperty = DependencyProperty.Register("ElevatorHomed", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Elevator Homed
        /// 
        public bool ElevatorHomed
        {
            get
            {
                return (bool)this.GetValue(ElevatorHomedProperty);
            }
            set
            {
                this.SetValue(ElevatorHomedProperty, value);
            }
        }
        public static readonly DependencyProperty GantryMovingProperty = DependencyProperty.Register("GantryMoving", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Gantry Moving
        /// 
        public bool GantryMoving
        {
            get
            {
                return (bool)this.GetValue(GantryMovingProperty);
            }
            set
            {
                this.SetValue(GantryMovingProperty, value);
            }
        }
        public static readonly DependencyProperty ElevatorMovingProperty = DependencyProperty.Register("ElevatorMoving", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Elevator Moving
        /// 
        public bool ElevatorMoving
        {
            get
            {
                return (bool)this.GetValue(ElevatorMovingProperty);
            }
            set
            {
                this.SetValue(ElevatorMovingProperty, value);
            }
        }
        public static readonly DependencyProperty BarcodeProperty = DependencyProperty.Register("Barcode", typeof(string), typeof(TransporterDebugControl),
          new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 条码
        /// 
        public string Barcode
        {
            get
            {
                return (string)this.GetValue(BarcodeProperty);
            }
            set
            {
                this.SetValue(BarcodeProperty, value);
            }
        }
        public static readonly DependencyProperty PositionListProperty = DependencyProperty.Register("PositionList", typeof(List), typeof(TransporterDebugControl),
          new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 位置集合
        /// 
        public List PositionList
        {
            get
            {
                return (List)this.GetValue(PositionListProperty);
            }
            set
            {
                this.SetValue(PositionListProperty, value);
            }
        }
        public static readonly DependencyProperty FromSelectedItemProperty = DependencyProperty.Register("FromSelectedItem", typeof(string), typeof(TransporterDebugControl),
        new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// From选择项
        /// 
        public string FromSelectedItem
        {
            get
            {
                return (string)this.GetValue(FromSelectedItemProperty);
            }
            set
            {
                this.SetValue(FromSelectedItemProperty, value);
            }
        }
        public static readonly DependencyProperty ToSelectedItemProperty = DependencyProperty.Register("ToSelectedItem", typeof(string), typeof(TransporterDebugControl),
        new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// To 选择项
        /// 
        public string ToSelectedItem
        {
            get
            {
                return (string)this.GetValue(ToSelectedItemProperty);
            }
            set
            {
                this.SetValue(ToSelectedItemProperty, value);
            }
        }
        public static readonly DependencyProperty IsHomedProperty = DependencyProperty.Register("IsHomed", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// IsHomed
        /// 
        public bool IsHomed
        {
            get
            {
                return (bool)this.GetValue(IsHomedProperty);
            }
            set
            {
                this.SetValue(IsHomedProperty, value);
            }
        }
        public static readonly DependencyProperty IsElevatorInUpPlaceProperty = DependencyProperty.Register("IsElevatorInUpPlace", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// IsElevatorInUpPlace
        /// 
        public bool IsElevatorInUpPlace
        {
            get
            {
                return (bool)this.GetValue(IsElevatorInUpPlaceProperty);
            }
            set
            {
                this.SetValue(IsElevatorInUpPlaceProperty, value);
            }
        }
        public static readonly DependencyProperty ForwardLimitProperty = DependencyProperty.Register("ForwardLimit", typeof(bool), typeof(TransporterDebugControl),
         new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// ForwardLimit
        /// 
        public bool ForwardLimit
        {
            get
            {
                return (bool)this.GetValue(ForwardLimitProperty);
            }
            set
            {
                this.SetValue(ForwardLimitProperty, value);
            }
        }
        #endregion
        public TransporterDebugControl()
        {
            InitializeComponent();
        }
        #region 指令
        private void Lock_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Lock");
        }
        private void Unlock_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Unlock");
        }
        private void Retract_Click(object sender, RoutedEventArgs e)
        {
            if (!IsElevatorInUpPlace)
            {
                MessageBox.Show("Elevator is not in 'UP' place", "Clamp", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Retract");
        }
        private void Extend_Click(object sender, RoutedEventArgs e)
        {
            if (!IsElevatorInUpPlace)
            {
                MessageBox.Show("Elevator is not in 'UP' place", "Clamp", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Extend");
        }
        private void Home_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.HomeAll");
        }
        private void ClearError_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ClearError");
        }
        private void PickUpFrom_Click(object sender, RoutedEventArgs e)
        {
            if(string.IsNullOrEmpty(FromSelectedItem))
            {
                MessageBox.Show("please select from item", "pick up", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PickUpFrom", FromSelectedItem);
        }
        private void MoveTo_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(ToSelectedItem))
            {
                MessageBox.Show("please select to item", "move to", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.MoveTo", ToSelectedItem);
        }
        private void PutDownTo_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(ToSelectedItem))
            {
                MessageBox.Show("please select to item", "put down to", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.PutDownTo", ToSelectedItem);
        }
        private void Park_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Park");
        }
        private void ElevatorUp_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ElevatorUp");
        }
        private void SwitchOn_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SwitchOn");
        }
        private void SwitchOff_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SwitchOff");
        }
        private void Abort_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
        }
        private void Transfer_Click(object sender, RoutedEventArgs e)
        {
            if (string.IsNullOrEmpty(FromSelectedItem))
            {
                MessageBox.Show("please select from item", "transfer", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            if (string.IsNullOrEmpty(ToSelectedItem))
            {
                MessageBox.Show("please select to item", "tranfer", MessageBoxButton.OK, MessageBoxImage.Error);
                return;
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Transfer", FromSelectedItem, ToSelectedItem);
        }
        private void ReadBarcode_Click(object sender, RoutedEventArgs e)
        {
            //由BarcodeReaderController发布
            InvokeClient.Instance.Service.DoOperation($"{BarcodeReaderDeviceName}.ReadBarcode");
        }
        private void TuneReader_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{BarcodeReaderDeviceName}.InitializeBarcode");
        }
        #endregion
    }
}