using Aucma.Core.CodeBinding.Views;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
using System.Windows;
using System;
using log4net;
using System.Diagnostics;
using System.Threading;
using NPOI.HSSF.Record;
using System.Threading.Tasks;
using Aucma.Core.PLc;
using System.Linq;
using Admin.Core.Common;
using Aucma.Core.Scanner;
using Admin.Core.Repository;
using Admin.Core.IRepository;
using Admin.Core.IService;
using Admin.Core.Service;
using Microsoft.Extensions.DependencyInjection;
using Admin.Core.Model;
using Admin.Core.Tasks;
using static ICSharpCode.SharpZipLib.Zip.ExtendedUnixData;
using System.Windows.Threading;
using Aucma.Core.CodeBinding.Business;

namespace Aucma.Core.CodeBinding.ViewModels
{
    public partial class MainWindowViewModel : ObservableObject
    {
        private static readonly log4net.ILog log = LogManager.GetLogger(typeof(MainWindowViewModel));
        private IndexPageView firstPage = new IndexPageView();//首页
        private StatisticsPageView recordPage = new StatisticsPageView();
        /// <summary>
        /// 查询信息更新
        /// </summary>
        /// <param name="Code1"></param>
        public  delegate  Task queryList(object obj);
        public static event queryList? queryListEvent;
      
        public MainWindowViewModel()
        {
          
            UserContent = firstPage;

            // 创建一个DispatcherTimer对象
            DispatcherTimer timer = new DispatcherTimer();
            timer.Interval = TimeSpan.FromSeconds(1);
            timer.Tick += Timer_Tick;
            timer.Start();
            GunBusiness.InstanceSerialPort3();

            Job_AllState_Quartz.RefreshStateEvent += RefreshStatus;

        }


        #region 设备状态刷新
        /// <summary>
        /// 设备状态刷新
        /// </summary>
        public Task RefreshStatus(bool mesState,bool plcState,bool scanner1,bool scanner2)
        {
            MesDbState(mesState);
            PlcState(plcState);
            Scanner1State(scanner1);
            Scanner2State(scanner2);
            return Task.CompletedTask;
        }
       
        /// <summary>
        /// 扫码器状态刷新
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        public void RefreshScanner()
        {
             string ip1 = Appsettings.app("Middleware", "Scanner1", "Ip");
             string ip2 = Appsettings.app("Middleware", "Scanner2", "Ip");
             bool flag1 = MvCodeHelper.ConnectionStatus(ip1);
             bool flag2 = MvCodeHelper.ConnectionStatus(ip2);
             Scanner1State(flag1);
             Scanner2State(flag2);
        }
        #endregion
       

        #region 更换界面

        public System.Windows.Controls.UserControl _content;

        public System.Windows.Controls.UserControl UserContent
        {
            get => _content;
            set => SetProperty(ref _content, value);
        }
        #endregion

 
        #region 窗口操作
        /// <summary>
        /// 窗口操作
        /// </summary>
        [RelayCommand]
        private void FormControl(object obj)
        {
            try
            {
                string controlType = obj as string;
                switch (controlType)
                {
                    // 关闭当前窗口
                    case "Exit":
                        if (System.Windows.MessageBox.Show("确定要退出系统吗?", "系统提醒", MessageBoxButton.YesNo, MessageBoxImage.Question, MessageBoxResult.No) == MessageBoxResult.Yes)
                        {
                            Application.Current.Shutdown();
                            Environment.Exit(0);
                        }

                        break;
                    // 打开软盘
                    case "TabTip":

                        OpenOsk();
                        break;
                    // 还原 或者 最大化当前窗口
                    case "Normal":
                        if (Application.Current.MainWindow.WindowState == WindowState.Normal)
                        {
                            Application.Current.MainWindow.WindowState = WindowState.Maximized;
                            break;
                        }
                        if (Application.Current.MainWindow.WindowState == WindowState.Maximized)
                        {
                            Application.Current.MainWindow.WindowState = WindowState.Normal;
                            break;
                        }
                        break;

                    // 最小化当前窗口
                    case "Minimized":
                        Application.Current.MainWindow.WindowState = WindowState.Minimized;
                        break;
                    default:
                        break;
                }
            }
            catch (Exception ex)
            {
                log.Error("窗体控制逻辑异常", ex);
            }

        }
        #endregion

        #region 打开软盘
        /// <summary>
        /// 打开软盘
        /// </summary>
        public static void OpenOsk()
        {
            Process proc = new Process();      
            proc.StartInfo.FileName = @"C:\Windows\System32\osk.exe";
            proc.StartInfo.UseShellExecute = true;
            proc.StartInfo.Verb = "runas";
            proc.Start();
        }
        #endregion
        #region 界面切换
        /// <summary>
        /// 界面切换
        /// </summary>
        [RelayCommand]
        private void SwitchPages(string page)
        {
            switch (page)
            {
                case "FirstPage":
                    UserContent = firstPage;
                    break;
                case "RecordPage":
                    UserContent = recordPage;
                    // 刷新查询框
                    queryListEvent?.Invoke(null);
                    break;
                default:
                    break;
            }
        }
        #endregion

        #region MES数据库状态
        /// <summary>
        /// MES数据库-文字
        /// </summary>
        public string _mesDbUIStatusWb;
        public string MesDbUIStatusWb
        {
            get => _mesDbUIStatusWb;
            set => SetProperty(ref _mesDbUIStatusWb, value);
        }
        /// <summary>
        /// MES数据库-颜色
        /// </summary>
        public string _mesDbUIColor;
        public string MesDbUIColor
        {
            get => _mesDbUIColor;
            set => SetProperty(ref _mesDbUIColor, value);
        }
        /// <summary>
        /// MES数据库-图标
        /// </summary>
        public string _mesUIIcon;
        public string MesUIIcon
        {
            get => _mesUIIcon;
            set => SetProperty(ref _mesUIIcon, value);
        }

        /// <summary>
        /// MES数据库连接状态
        /// </summary>
        /// <param name="type"></param>
        public void MesDbState(bool type)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (type)
                {
                    MesDbUIStatusWb = "MES数据库";
                    MesDbUIColor = "Green";
                    MesUIIcon = "Assets/Images/Green.png";
                }
                else
                {
                    MesDbUIStatusWb = "MES数据库";
                    MesDbUIColor = "Red";
                    MesUIIcon = "Assets/Images/Red.png";
                }
            });
        }
        #endregion

        #region plc 状态
        /// <summary>
        /// UI plc 展示状态-文字
        /// </summary>
        public string _plcUIStatusWb;
        public string PlcUIStatusWb
        {
            get => _plcUIStatusWb;
            set => SetProperty(ref _plcUIStatusWb, value);
        }
        /// <summary>
        /// UI plc 展示状态-颜色
        /// </summary>
        public string _plcUIColor;
        public string PlcUIColor
        {
            get => _plcUIColor;
            set => SetProperty(ref _plcUIColor, value);
        }
        /// <summary>
        /// UI plc 展示状态-图标
        /// </summary>
        public string _plcUIIcon;
        public string PlcUIIcon
        {
            get => _plcUIIcon;
            set => SetProperty(ref _plcUIIcon, value);
        }

        /// <summary>
        /// PLC连接状态-true:连接成功;false:失败
        /// </summary>
        /// <param name="type"></param>
        public void PlcState(bool type)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (type)
                {
                    PlcUIStatusWb = "PLC状态";
                    PlcUIColor = "Green";
                    PlcUIIcon = "Assets/Images/Green.png";
                }
                else
                {
                    PlcUIStatusWb = "PLC状态";
                    PlcUIColor = "Red";
                    PlcUIIcon = "Assets/Images/Red.png";
                }
            });
        }
        #endregion

        #region 扫码器1状态
        /// <summary>
        /// UI  展示状态-文字
        /// </summary>
        public string _scanner1UIStatusWb;
        public string Scanner1UIStatusWb
        {
            //get { return plcUIStatusWb; }
            //set { plcUIStatusWb = value; RaisePropertyChanged("PlcUIStatusWb"); }
            get => _scanner1UIStatusWb;
            set => SetProperty(ref _scanner1UIStatusWb, value);
        }
        /// <summary>
        /// UI  展示状态-颜色
        /// </summary>
        public string _scanner1UIColor;
        public string Scanner1UIColor
        {
            //get { return plcUIColor; }
            //set { plcUIColor = value; RaisePropertyChanged("PlcUIColor"); }
            get => _scanner1UIColor;
            set => SetProperty(ref _scanner1UIColor, value);
        }
        /// <summary>
        /// UI  展示状态-图标
        /// </summary>
        public string _scanner1UIIcon;
        public string Scanner1UIIcon
        {
            //get { return plcUIIcon; }
            //set { plcUIIcon = value; RaisePropertyChanged("plcUIIcon"); }
            get => _scanner1UIIcon;
            set => SetProperty(ref _scanner1UIIcon, value);
        }

        /// <summary>
        /// 扫码器1连接状态-true:连接成功;false:失败
        /// </summary>
        /// <param name="type"></param>
        public void Scanner1State(bool type)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (type)
                {
                    Scanner1UIStatusWb  = "扫码器1状态";
                    Scanner1UIColor     = "Green";
                    Scanner1UIIcon      = "Assets/Images/Green.png";
                }
                else
                {
                    Scanner1UIStatusWb = "扫码器1状态";
                    Scanner1UIColor    = "Red";
                    Scanner1UIIcon     = "Assets/Images/Red.png";
                }
            });
        }
        #endregion

        #region 扫码器2状态
        /// <summary>
        /// UI  展示状态-文字
        /// </summary>
        public string _scanner2UIStatusWb;
        public string Scanner2UIStatusWb
        {
            //get { return plcUIStatusWb; }
            //set { plcUIStatusWb = value; RaisePropertyChanged("PlcUIStatusWb"); }
            get => _scanner2UIStatusWb;
            set => SetProperty(ref _scanner2UIStatusWb, value);
        }
        /// <summary>
        /// UI  展示状态-颜色
        /// </summary>
        public string _scanner2UIColor;
        public string Scanner2UIColor
        {
            //get { return plcUIColor; }
            //set { plcUIColor = value; RaisePropertyChanged("PlcUIColor"); }
            get => _scanner2UIColor;
            set => SetProperty(ref _scanner2UIColor, value);
        }
        /// <summary>
        /// UI  展示状态-图标
        /// </summary>
        public string _scanner2UIIcon;
        public string Scanner2UIIcon
        {
            //get { return plcUIIcon; }
            //set { plcUIIcon = value; RaisePropertyChanged("plcUIIcon"); }
            get => _scanner2UIIcon;
            set => SetProperty(ref _scanner2UIIcon, value);
        }

        /// <summary>
        /// 扫码器2连接状态-true:连接成功;false:失败
        /// </summary>
        /// <param name="type"></param>
        public void Scanner2State(bool type)
        {
            Application.Current.Dispatcher.Invoke(() =>
            {
                if (type)
                {
                    Scanner2UIStatusWb = "扫码器2状态";
                    Scanner2UIColor = "Green";
                    Scanner2UIIcon = "Assets/Images/Green.png";
                }
                else
                {
                    Scanner2UIStatusWb = "扫码器2状态";
                    Scanner2UIColor = "Red";
                    Scanner2UIIcon = "Assets/Images/Red.png";
                }
            });
        }
        #endregion

        public string _currentDateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        public string CurrentDateTime
        {
            get => _currentDateTime;
            set => SetProperty(ref _currentDateTime, value);
        }

        public string _shiftStr = string.Empty;
        public string ShiftStr
        {
            get => _shiftStr;
            set => SetProperty(ref _shiftStr, value);
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            DateTime now = DateTime.Now;

            // 判断当前是否是白班时间段
            if (now.Hour >= 8 && now.Hour < 20)
            {
                ShiftStr = $"白班 08点-20点";
            }
            else
            {

                ShiftStr = $"夜班 20点-08点";
            }
            CurrentDateTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
        }


    }
}