using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using SlnMesnac.WPF.Page.Generate;
using SlnMesnac.WPF.Page.IndexPage;
using System;
using System.Windows;

namespace SlnMesnac.WPF.ViewModel
{
    public class MainWindowViewModel: ViewModelBase
    {
        private readonly ILogger<MainWindowViewModel> _logger;

        //代码生成
        private readonly GenerateControl generateControl = new GenerateControl();
        private IndexContent indexContent = new IndexContent();

        #region 参数定义
        /// <summary>
        /// PLC设备状态
        /// </summary>
        private int _PlcStatus = 0;
        public int PlcStatus
        {
            get { return _PlcStatus; }
            set { _PlcStatus = value; RaisePropertyChanged(nameof(PlcStatus)); }
        }
        /// <summary>
        /// 箱壳扫码器状态
        /// </summary>
        private int _ShellScannerStatus = 0;
        public int ShellScannerStatus
        {
            get { return _ShellScannerStatus; }
            set { _ShellScannerStatus = value; RaisePropertyChanged(nameof(ShellScannerStatus)); }
        }

        /// <summary>
        /// 内胆扫码器状态
        /// </summary>
        private int _BoldScannerStatus = 0;
        public int BoldScannerStatus
        {
            get { return _BoldScannerStatus; }
            set { _BoldScannerStatus = value; RaisePropertyChanged(nameof(BoldScannerStatus)); }
        }

        public System.Windows.Controls.UserControl _content;

        public System.Windows.Controls.UserControl UserContent
        {
            get { return _content; }

            set
            {
                _content = value;
                RaisePropertyChanged(nameof(UserContent));
            }
        }
        #endregion

        #region 事件定义
        /// <summary>
        /// 界面跳转按钮事件
        /// </summary>
        public RelayCommand<object> ControlOnClickCommand { get; set; }

        /// <summary>
        /// 打开系统键盘
        /// </summary>
        public RelayCommand OpenSystemKeyboardCommand { get; set; }

        /// <summary>
        /// 窗体控制
        /// </summary>
        public RelayCommand<object> FormControlCommand { get; set; }
        #endregion

        public MainWindowViewModel()
        {

            _logger = App.ServiceProvider.GetService<ILogger<MainWindowViewModel>>();

            ControlOnClickCommand = new RelayCommand<object>(obj => ControlOnClick(obj));
            FormControlCommand = new RelayCommand<object>(x => FormControl(x));

            UserContent = indexContent;
        }

        /// <summary>
        ///  窗体控制
        /// </summary>
        /// <param name="obj"></param>
        private void FormControl(object obj)
        {
            try
            {
                string controlType = obj as string;
                switch (controlType)
                {
                    // 关闭当前窗口
                    case "Exit":
                        //Environment.Exit(0);
                        Application.Current.Shutdown();
                        break;
                    case "Generate":
                        UserContent = generateControl;
                        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)
            {
                _logger.LogError("窗体控制逻辑异常", ex);
            }
        }

        /// <summary>
        /// 界面跳转
        /// </summary>
        private void ControlOnClick(object obj)
        {
            try
            {
                string info = obj as string;
                switch (info)
                {
                    case "Index":
                        UserContent = indexContent;
                        break;
                    default: break;
                }
            }
            catch (Exception ex)
            {
                _logger.LogError("界面跳转逻辑异常", ex);
            }
        }

    }
}
