using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using AntdUI;
using DH.Commons.Base;
using DH.Commons.Models;
using DHSoftware.Views;

namespace DHSoftware
{
    public partial class RBACWindow : Window
    {
        public RBACWindow()
        {
            InitializeComponent();
            menu1.SelectChanged += Menu1_SelectChanged;
        }

        /// <summary>
        /// 窗体对象实例
        /// </summary>
        private static RBACWindow _instance;

        internal static RBACWindow Instance
        {
            get
            {
                if (_instance == null || _instance.IsDisposed)
                    _instance = new RBACWindow();
                return _instance;
            }
        }
        private void Menu1_SelectChanged(object sender, MenuSelectEventArgs e)
        {
            MenuItem clickedItem = e.Value;

            if (clickedItem != null)
            {
                if (clickedItem.PARENTITEM == null)
                {
                    return;
                }

                switch (clickedItem.PARENTITEM.Text)
                {
                    case "用户管理":
                        foreach (var tab in tabs1.Pages)
                        {
                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
                            {
                                tabs1.SelectedTab = existingTab; 
                                return;
                            }
                        }

                        CameraBase? CameraBase = ConfigModel.CameraBaseList.Where(c => c.CameraName == clickedItem.Text).FirstOrDefault();
                        if (CameraBase == null)
                        {
                            CameraBase = new CameraBase();
                        }
                        UserControl control = null;
                        control = new CameraControl(this, CameraBase);
                        if (control != null)
                        {
                            //容器添加控件,需要调整dpi
                            control.Dock = DockStyle.Fill;
                            AutoDpi(control);
                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
                            {
                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
                                ReadOnly = false,
                            };
                            tabPage.Controls.Add(control);
                            tabs1.Pages.Add(tabPage);

                            tabs1.SelectedTab = tabPage;
               
                        }
                        break;

                    case "角色管理":
                        // 检查是否已存在同名 TabPage
                        foreach (var tab in tabs1.Pages)
                        {
                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
                            {
                              
                                tabs1.SelectedTab = existingTab; 
                                return;
                            }
                        }
                        DetectionConfig? detectionConfig = ConfigModel.DetectionList.Where(c => c.Name == clickedItem.Text).FirstOrDefault();
                        if (detectionConfig == null)
                        {
                            detectionConfig = new DetectionConfig();
                        }
                        UserControl control1 = null;
                        control1 = new DetectControl(this, detectionConfig);
                        if (control1 != null)
                        {
                            //容器添加控件,需要调整dpi
                            control1.Dock = DockStyle.Fill;
                            AutoDpi(control1);
                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
                            {
                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
                                ReadOnly = false,
                            };
                            tabPage.Controls.Add(control1);
                            tabs1.Pages.Add(tabPage);
                            tabs1.SelectedTab = tabPage;
 
                        }
                        break;

                    case "权限管理":
                        foreach (var tab in tabs1.Pages)
                        {
                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
                            {
                                tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
                               
                                return;
                            }
                        }
                        //先获取是否存在该名称的配置
                        //如果没有新建项
                        PLCBase? pLCBase = ConfigModel.PLCBaseList.Where(c => c.PLCName == clickedItem.Text).FirstOrDefault();
                        if (pLCBase == null)
                        {
                            pLCBase = new PLCBase();
                        }
                        UserControl control2 = null;
                        control = new MotionControl(this, pLCBase);
                        if (control != null)
                        {
                            //容器添加控件,需要调整dpi
                            control.Dock = DockStyle.Fill;
                            AutoDpi(control);
                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
                            {
                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
                                ReadOnly = false,
                            };
                            tabPage.Controls.Add(control);
                            tabs1.Pages.Add(tabPage);
                            tabs1.SelectedTab = tabPage;
                        }
                        break;
                    case "其他设置":
                        foreach (var tab in tabs1.Pages)
                        {
                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
                            {
                                tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
                                return;
                            }
                        }

                        if (clickedItem.Text == "全局设置")
                        {
                            //先获取是否存在该名称的配置
                            //如果没有新建项
                            GlobalConfig? global = ConfigModel
                            .GlobalList.FirstOrDefault();
                            if (global == null)
                            {
                                global = new GlobalConfig();
                            }

                            UserControl control3 = null;
                            control = new GlobalControl(this, global);
                            if (control != null)
                            {
                                //容器添加控件,需要调整dpi
                                control.Dock = DockStyle.Fill;
                                AutoDpi(control);
                                AntdUI.TabPage tabPage = new AntdUI.TabPage()
                                {
                                    Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
                                    ReadOnly = false,
                                };
                                tabPage.Controls.Add(control);
                                tabs1.Pages.Add(tabPage);
                                tabs1.SelectedTab = tabPage;

                            }
                        }
                        break;
                }
            }
        }
    }
}