using MECF.Framework.Common.CommonData.PowerSupplier;
using MECF.Framework.Common.OperationCenter;
using System;
using System.Collections.Generic;
using System.Linq;
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 PunkHPX8_Themes.UserControls
{
    /// 
    /// PowerSupplyChannelControl.xaml 的交互逻辑
    /// 
    public partial class PowerSupplyChannelControl : UserControl
    {
        #region 属性
        public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register("ModuleName", typeof(string), typeof(PowerSupplyChannelControl),
          new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 模块名称
        /// 
        public string ModuleName
        {
            get
            {
                return (string)this.GetValue(ModuleNameProperty);
            }
            set
            {
                this.SetValue(ModuleNameProperty, value);
            }
        }
        public static readonly DependencyProperty ModuleTitleProperty = DependencyProperty.Register("ModuleTitle", typeof(string), typeof(PowerSupplyChannelControl),
         new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 模块标题
        /// 
        public string ModuleTitle
        {
            get
            {
                return (string)this.GetValue(ModuleTitleProperty);
            }
            set
            {
                this.SetValue(ModuleTitleProperty, value);
            }
        }
        public static readonly DependencyProperty MetalCellSideNameProperty = DependencyProperty.Register("MetalCellSideName", typeof(string), typeof(PowerSupplyChannelControl),
        new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// Metal单元面名称
        /// 
        public string MetalCellSideName
        {
            get
            {
                return (string)this.GetValue(MetalCellSideNameProperty);
            }
            set
            {
                this.SetValue(MetalCellSideNameProperty, value);
            }
        }
        public static readonly DependencyProperty InputSetPointProperty = DependencyProperty.Register("InputSetPoint", typeof(double), typeof(PowerSupplyChannelControl),
     new FrameworkPropertyMetadata((double)0, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 输入设置数值
        /// 
        public double InputSetPoint
        {
            get
            {
                return (double)this.GetValue(InputSetPointProperty);
            }
            set
            {
                this.SetValue(InputSetPointProperty, value);
            }
        }
        public static readonly DependencyProperty SetPointProperty = DependencyProperty.Register("SetPoint", typeof(double), typeof(PowerSupplyChannelControl),
     new FrameworkPropertyMetadata((double)0, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 设置数值
        /// 
        public double SetPoint
        {
            get
            {
                return (double)this.GetValue(SetPointProperty);
            }
            set
            {
                this.SetValue(SetPointProperty, value);
            }
        }
        public static readonly DependencyProperty PowerStatusProperty = DependencyProperty.Register("PowerStatus", typeof(string), typeof(PowerSupplyChannelControl),
        new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 电源状态
        /// 
        public string PowerStatus
        {
            get
            {
                return (string)this.GetValue(PowerStatusProperty);
            }
            set
            {
                this.SetValue(PowerStatusProperty, value);
            }
        }
        public static readonly DependencyProperty CurrentProperty = DependencyProperty.Register("Current", typeof(double), typeof(PowerSupplyChannelControl),
      new FrameworkPropertyMetadata((double)0, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 电流
        /// 
        public double Current
        {
            get
            {
                return (double)this.GetValue(CurrentProperty);
            }
            set
            {
                this.SetValue(CurrentProperty, value);
            }
        }
        public static readonly DependencyProperty VoltageProperty = DependencyProperty.Register("Voltage", typeof(double), typeof(PowerSupplyChannelControl),
      new FrameworkPropertyMetadata((double)0, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 电压
        /// 
        public double Voltage
        {
            get
            {
                return (double)this.GetValue(VoltageProperty);
            }
            set
            {
                this.SetValue(VoltageProperty, value);
            }
        }
        public static readonly DependencyProperty OutputEnabledProperty = DependencyProperty.Register("OutputEnabled", typeof(bool), typeof(PowerSupplyChannelControl),
      new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 可用性
        /// 
        public bool OutputEnabled
        {
            get
            {
                return (bool)this.GetValue(OutputEnabledProperty);
            }
            set
            {
                this.SetValue(OutputEnabledProperty, value);
            }
        }
        public static readonly DependencyProperty ConnectedProperty = DependencyProperty.Register("Connected", typeof(bool), typeof(PowerSupplyChannelControl),
      new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 连接状态
        /// 
        public bool Connected
        {
            get
            {
                return (bool)this.GetValue(ConnectedProperty);
            }
            set
            {
                this.SetValue(ConnectedProperty, value);
            }
        }
        public static readonly DependencyProperty PowerControlProperty = DependencyProperty.Register("PowerControl", typeof(string), typeof(PowerSupplyChannelControl),
    new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 电源远程状态
        /// 
        public string PowerControl
        {
            get
            {
                return (string)this.GetValue(PowerControlProperty);
            }
            set
            {
                this.SetValue(PowerControlProperty, value);
            }
        }
        public static readonly DependencyProperty PowerRunModelProperty = DependencyProperty.Register("PowerRunModel", typeof(string), typeof(PowerSupplyChannelControl),
    new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 电源运行模式
        /// 
        public string PowerRunModel
        {
            get
            {
                return (string)this.GetValue(PowerRunModelProperty);
            }
            set
            {
                this.SetValue(PowerRunModelProperty, value);
            }
        }
        public static readonly DependencyProperty Step1DataProperty = DependencyProperty.Register("Step1Data", typeof(PowerSupplierStepPeriodData), typeof(PowerSupplyChannelControl),
      new FrameworkPropertyMetadata(new PowerSupplierStepPeriodData(), FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 连接状态
        /// 
        public PowerSupplierStepPeriodData Step1Data
        {
            get
            {
                return (PowerSupplierStepPeriodData)this.GetValue(Step1DataProperty);
            }
            set
            {
                this.SetValue(Step1DataProperty, value);
            }
        }
        public static readonly DependencyProperty Step2DataProperty = DependencyProperty.Register("Step2Data", typeof(PowerSupplierStepPeriodData), typeof(PowerSupplyChannelControl),
     new FrameworkPropertyMetadata(new PowerSupplierStepPeriodData(), FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 连接状态
        /// 
        public PowerSupplierStepPeriodData Step2Data
        {
            get
            {
                return (PowerSupplierStepPeriodData)this.GetValue(Step2DataProperty);
            }
            set
            {
                this.SetValue(Step2DataProperty, value);
            }
        }
        public static readonly DependencyProperty Step3DataProperty = DependencyProperty.Register("Step3Data", typeof(PowerSupplierStepPeriodData), typeof(PowerSupplyChannelControl),
     new FrameworkPropertyMetadata(new PowerSupplierStepPeriodData(), FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 连接状态
        /// 
        public PowerSupplierStepPeriodData Step3Data
        {
            get
            {
                return (PowerSupplierStepPeriodData)this.GetValue(Step3DataProperty);
            }
            set
            {
                this.SetValue(Step3DataProperty, value);
            }
        }
        #endregion
        public PowerSupplyChannelControl()
        {
            InitializeComponent();
        }
        #region 按钮事件
        private void Enable_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Enable");
        }
        private void Disable_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Disable");
        }
        private void SetPoint_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetPoint","TargetPoint",InputSetPoint);
        }
        /// 
        /// 启动
        /// 
        /// 
        /// 
        private void Start_Click(object sender, RoutedEventArgs e)
        {
            List stepPeriodDatas = new List();
            if(Step1Data.Hour+Step1Data.Minute+Step1Data.Second+Step1Data.Microsecond!=0&&Step1Data.Current!=0) 
            {
                Step1Data.Voltage = 6;
                stepPeriodDatas.Add(Step1Data);
            }
            else
            {
                return;
            }
            if (Step2Data.Hour + Step2Data.Minute + Step2Data.Second + Step2Data.Microsecond != 0 && Step2Data.Current != 0)
            {
                Step2Data.Voltage = 6;
                stepPeriodDatas.Add(Step2Data);
            }
            if (Step3Data.Hour + Step3Data.Minute + Step3Data.Second + Step3Data.Microsecond != 0 && Step3Data.Current != 0)
            {
                Step3Data.Voltage = 6;
                stepPeriodDatas.Add(Step3Data);
            }
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.StartStepPeriod", "StepPeriodDatas", stepPeriodDatas);
        }
        private void Remote_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetRemoteControl");
        }
        private void Local_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.SetLocalControl");
        }
        private void Abort_Click(object sender, RoutedEventArgs e)
        {
            InvokeClient.Instance.Service.DoOperation($"{ModuleName}.Abort");
        }
        #endregion
    }
}