using DevExpress.LookAndFeel;
using DevExpress.XtraBars.Docking;
using ESRI.ArcGIS.Controls;
using KGIS.Framework.Core.Services;
using KGIS.Framework.Menus;
using KGIS.Framework.Menus.Services;
using KGIS.Framework.Platform;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Helper;
using KGIS.Framework.Views;
using Kingo.PluginServiceInterface;
using System;
using System.Drawing;
using System.Windows.Forms;
using UIShell.OSGi;
namespace Kingo.PlatformPlugin.Services
{
    class PlatformService : IPlatformService
    {
        FrmMain _win;
        private IBundleContext _context;
        private Timer _timer;
        //private UCDataCatalog ucDataCatalog;
        //private UCMapControl ucMapCtrl;
        private IBaseMainView baseMainViewService;
        public PlatformService(IBundleContext context)
        {
            _context = context;
            _win = FrmMain.GetInstance(context);
            _win.Load += _win_Load;
            _win.Closing += _win_Closing;
        }
        private void _win_Load(object sender, EventArgs e)
        {
        }
        /// 
        /// 程序右上角X号,关闭当前程序
        /// 
        /// 
        /// 
        private void _win_Closing(object sender, System.ComponentModel.CancelEventArgs e)
        {
            try
            {
                EngineEditor editor = new EngineEditorClass();
                if (editor.EditState == esriEngineEditState.esriEngineStateEditing)
                {
                    MessageHelper.ShowTips("当前工程正处于编辑状态,请先关闭编辑!");
                    e.Cancel = true;
                    return;
                }
                if (MessageHelper.ShowYesNoAndTips(sender as IWin32Window, "是否退出系统?") != DialogResult.Yes)
                {
                    e.Cancel = true;
                }
                else
                {
                    System.Diagnostics.Process[] pro = System.Diagnostics.Process.GetProcessesByName("adb.exe");
                    foreach (System.Diagnostics.Process p in pro)
                    {
                        if (!string.IsNullOrEmpty(p.ProcessName))
                        {
                            try
                            {
                                p.Kill();
                            }
                            catch (Exception ex)
                            {
                                LogAPI.Debug(ex);
                            }
                        }
                    }
                    //GC.Collect();
                    //20231030 王冠杰 注释    软件关闭 未响应
                    //Platform.Instance.SendMsg(new KGIS.Framework.Utils.Interface.NotifyMsgPackage() { MsgType = "SaveProject" });
                    System.Environment.Exit(0);
                    //Application.ExitThread();
                    //Application.Exit();
                }
            }
            catch (Exception ex)
            {
                LogAPI.Debug("关闭当前程序报错:" + ex.Message);
            }
        }
        public Form Instance => _win;
        public void InitUI(object args)
        {
            try
            {
                System.Windows.Forms.Application.DoEvents();
                //设置系统风格
                //DevExpress.UserSkins.BonusSkins.Register();
                //DevExpress.Skins.SkinManager.EnableFormSkins();
                UserLookAndFeel.Default.SetSkinStyle("Office 2016 Colorful");
                switch (Platform.Instance.SystemType)
                {
                    case SystemTypeEnum.NDBGJK:
                        break;
                    case SystemTypeEnum.WYZS:
                        break;
                    case SystemTypeEnum.TBBG:
                        UserLookAndFeel.Default.SetSkinMaskColors(Color.FromArgb(255, 135, 206, 235), Color.White);
                        UserLookAndFeel.Default.SkinMaskColor = Color.FromArgb(255, 135, 206, 235);
                        break;
                    case SystemTypeEnum.BGFWCG:
                        UserLookAndFeel.Default.SetSkinMaskColors(Color.FromArgb(255, 240, 128, 128), Color.White);
                        UserLookAndFeel.Default.SkinMaskColor = Color.FromArgb(255, 240, 128, 128);
                        break;
                    default:
                        break;
                }
                //DevExpress.XtraEditors.WindowsFormsSettings.DefaultLookAndFeel.SetSkinStyle("Office 2013 White");
                baseMainViewService = _context.GetFirstOrDefaultService();
                DockManager dockManager = null;
                if (baseMainViewService != null)
                {
                    if (baseMainViewService.DocumentView is IDockManage)
                    {
                        dockManager = (baseMainViewService.DocumentView as IDockManage).dockManager;
                    }
                }
                _context.AddService(new MenuService(_win.RibControl));
                //_context.AddService(new AppMenuService(_win.backViewControl));
                _context.AddService(new ViewService(_win.dockManager, dockManager, _win.tabbedView, _win.WorkPath));
                if (baseMainViewService != null)
                {
                    baseMainViewService.InitUI();
                    IRefreshMenuStatus t = baseMainViewService as IRefreshMenuStatus;
                    t.InitUI(_win.RibControl);
                    //object hook = null;
                    //if (baseMainViewService.DocumentView is KGIS.Framework.AE.IKMap)
                    //{
                    //    hook = (baseMainViewService.DocumentView as KGIS.Framework.AE.IKMap).Hook;
                    //}
                    //初始化菜单
                    Platform.Instance.InitMainMenu(baseMainViewService.Hook);
                }
                //初始化系统开始菜单
                //Platform.Instance.AppMenuManager.InitAppMenu(hook);
                //初始化数据目录右键菜单
                //Platform.Instance.InitCatalogContextMenus(hook);
                //Platform.Instance.MapsManager.InitMapTools();
                _timer = new Timer();
                _timer.Tick += _timer_Tick;
                _timer.Interval = 1000;
                _timer.Start();
            }
            catch (Exception ex)
            {
                LogAPI.Debug("InitUI异常:" + ex.Message);
                LogAPI.Debug("InitUI异常:" + ex.StackTrace);
            }
        }
        /// 
        /// 初始化相关服务
        /// 
        /// 
        public void InitService()
        {
            baseMainViewService = _context.GetFirstOrDefaultService();
            DockManager dockManager = null;
            if (baseMainViewService != null)
            {
                //baseMainViewService.InitUI();
                if (baseMainViewService.DocumentView is IDockManage)
                {
                    dockManager = (baseMainViewService.DocumentView as IDockManage).dockManager;
                }
                _context.AddService(new MenuService(_win.RibControl));
                //_context.AddService(new AppMenuService(_win.backViewControl));
                _context.AddService(new ViewService(_win.dockManager, dockManager, _win.tabbedView, _win.WorkPath));
            }
        }
        int num = 0;
        private void _timer_Tick(object sender, EventArgs e)
        {
            if (num <= 1)
                num++;
            if (num == 1)
            {
                if (baseMainViewService != null)
                {
                    //初始化数据目录
                    //ucDataCatalog.Text = "数据目录";
                    Platform.Instance.OpenView(baseMainViewService.DefaultLeftDockPanel, false);
                    //初始化地图控件
                    Platform.Instance.ViewManager.AddDocument(baseMainViewService.DocumentView);
                }
                if (Platform.Instance.SystemType == SystemTypeEnum.BGFWCG)
                {
                    IUcZYQMagrHelper ucZYQMagrHelper = BundleRuntime.Instance.GetFirstOrDefaultService();
                    if (ucZYQMagrHelper != null)
                    {
                        ucZYQMagrHelper.InitView();
                    }
                }
                IWorkCatalog _workCatalog = _context.GetFirstOrDefaultService();
                if (_workCatalog != null)
                {
                    _workCatalog.Open();
                }
            }
            Platform.Instance.RefreshMenuState();
            if (baseMainViewService != null)
                baseMainViewService.RefreshMenuOrToolState();
            //Platform.Instance.MapsManager.RefreshToolState();
        }
    }
}