using Aitex.Core.UI.MVVM;
using Aitex.Core.Utilities;
using MECF.Framework.Common.Equipment;
using MECF.Framework.Common.OperationCenter;
using MECF.Framework.Common.Persistent.Prewet;
using MECF.Framework.Common.Persistent.SRD;
using Microsoft.Win32;
using System;
using System.Collections.Generic;
using System.Diagnostics;
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
{
    /// 
    /// OperatingModeControl.xaml 的交互逻辑
    /// 
    public partial class OperatingModeControl : UserControl
    {
        public OperatingModeControl()
        {
            InitializeComponent();
        }
        public static readonly DependencyProperty ModuleNameProperty = DependencyProperty.Register(
          "ModuleName", typeof(string), typeof(OperatingModeControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// 模块名称
        /// 
        public string ModuleName
        {
            get
            {
                return (string)this.GetValue(ModuleNameProperty);
            }
            set
            {
                this.SetValue(ModuleNameProperty, value);
            }
        }
        public static readonly DependencyProperty SubModuleNameProperty = DependencyProperty.Register(
           "SubModuleName", typeof(string), typeof(OperatingModeControl), new FrameworkPropertyMetadata("", FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// SubModuleName
        /// 
        public string SubModuleName
        {
            get
            {
                return (string)this.GetValue(SubModuleNameProperty);
            }
            set
            {
                this.SetValue(SubModuleNameProperty, value);
            }
        }
        public static readonly DependencyProperty IsDisabledProperty = DependencyProperty.Register(
            "IsDisabled", typeof(bool), typeof(OperatingModeControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// IsDisabled
        /// 
        public bool IsDisabled
        {
            get
            {
                return (bool)this.GetValue(IsDisabledProperty);
            }
            set
            {
                this.SetValue(IsDisabledProperty, value);
            }
        }
        public static readonly DependencyProperty IsManualProperty = DependencyProperty.Register(
            "IsManual", typeof(bool), typeof(OperatingModeControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// IsManual
        /// 
        public bool IsManual
        {
            get
            {
                return (bool)this.GetValue(IsManualProperty);
            }
            set
            {
                this.SetValue(IsManualProperty, value);
            }
        }
        public static readonly DependencyProperty IsAutoProperty = DependencyProperty.Register(
            "IsAuto", typeof(bool), typeof(OperatingModeControl), new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.AffectsRender));
        /// 
        /// IsAuto
        /// 
        public bool IsAuto
        {
            get
            {
                return (bool)this.GetValue(IsAutoProperty);
            }
            set
            {
                this.SetValue(IsAutoProperty, value);
            }
        }
        public static readonly DependencyProperty OperationModeValueProperty = DependencyProperty.Register(
           "OperationModeValue", typeof(string), typeof(OperatingModeControl), new FrameworkPropertyMetadata(null, new PropertyChangedCallback(OnItemsSourceChanged)));
        /// 
        /// OpertationModeValue
        /// 
        public string OperationModeValue
        {
            get
            {
                return (string)this.GetValue(OperationModeValueProperty);
            }
            set
            {
                this.SetValue(OperationModeValueProperty, value);
            }
        }
        private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            string moduleName = (string)d.GetValue(ModuleNameProperty);
            OperatingModeControl control = (OperatingModeControl)d;
            if (e.NewValue != null)
            {
                string currentMode = (string)e.NewValue;
                switch (currentMode)
                {
                    case "Disabled":
                        d.SetValue(IsDisabledProperty, true);
                        d.SetValue(IsManualProperty, false);
                        d.SetValue(IsAutoProperty, false); break;
                    case "Manual":
                        d.SetValue(IsDisabledProperty, false);
                        d.SetValue(IsManualProperty, true);
                        d.SetValue(IsAutoProperty, false); break;
                    case "Auto":
                        d.SetValue(IsDisabledProperty, false);
                        d.SetValue(IsManualProperty, false);
                        d.SetValue(IsAutoProperty, true); break;
                    default:
                        break;
                }                        
            }
        }
        private void Disabled_Click(object sender, RoutedEventArgs e)
        {
            if (SubModuleName == "DosingSystem")
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DisabledAction", true);
            }
            else
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.DisabledAction");
            }
                
        }
        private void Manual_Click(object sender, RoutedEventArgs e)
        {
            if(SubModuleName == "DosingSystem")
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ManualAction", true);
            }
            else
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.ManualAction");
            }
            
        }
        private void Automatic_Click(object sender, RoutedEventArgs e)
        {
            if (SubModuleName == "DosingSystem")
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.AutoAction", true);
            }
            else
            {
                InvokeClient.Instance.Service.DoOperation($"{ModuleName}.AutoAction");
            }               
        }      
    }
}