using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;
using KGIS.Framework.AE;
using KGIS.Framework.AE.Enum;
using KGIS.Framework.Utils;
using KGIS.Framework.Utils.Dialog;
using KGIS.Framework.Utils.Helper;
using KUI.Windows;
using System;
using System.Collections.Generic;
using System.Runtime.InteropServices;
using System.Windows;
namespace Kingo.Plugin.DataLoad.View
{
    /// 
    /// 覆盖工程数据 的交互逻辑
    /// 
    public partial class FrmLoadProjectData : BaseWindow
    {
        public FrmLoadProjectData()
        {
            InitializeComponent();
            this.Title = "覆盖工程数据";
        }
        private string SelectPathName = string.Empty;
        private readonly List ZLlays = new List() { "DLTBGX", "DLTBGXGC", "CZCDYDGX", "CZCDYDGXGC", "CZCDYDGX", "CJDCQGX", "CJDCQJXGX", "CJDCQGXGC", "XZQGX", "XZQJXGX", "XZQGXGC", "TTQGX", "LMFWGX", "GCHZZGX", "GFBQGX", "GDDBGX", "CCWJQGX", "PDTGX" };
        private void BtnSelectedOtherData_Click(object sender, RoutedEventArgs e)
        {
            try
            {
                FolderBrowserDialog m_Dialog = new FolderBrowserDialog();
                System.Windows.Forms.DialogResult result = m_Dialog.ShowDialog();
                if (result == System.Windows.Forms.DialogResult.Cancel) return;
                string m_Dir = m_Dialog.SelectedPath.Trim();
                SelectPathName = m_Dir;
                this.btnPrjDir.Text = m_Dir;//工程路径
            }
            catch (Exception ex)
            {
                LogAPI.Debug("新建工程页面中-选择工程目录时失败,异常原因: " + ex + " ; ");
                MessageHelper.ShowTips("操作异常:" + ex.Message);
            }
        }
        private void BtnLoad_Click(object sender, RoutedEventArgs e)
        {
            IWorkspaceAPI s_WsAPI = null;
            IFeatureClassAPI TempFCApi = null;
            try
            {
                this.ShowLoading("正在进行数据覆盖中.......", 0, 0);
                IFeatureLayer ImproDataLayer;
                if (cbOverlayBGData.IsChecked == true)
                {
                    this.UpdateMsg($"正在进行DLTBBG数据覆盖中.......");
                    s_WsAPI = new WorkspaceAPI(System.IO.Path.Combine(SelectPathName, "BGDB.gdb"), WorkspaceTypeEnum.GDBFile, true);
                    ImproDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG");
                    if (ImproDataLayer != null && ImproDataLayer.FeatureClass != null)
                        (ImproDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTBBG WHERE 1=1");
                    TempFCApi = s_WsAPI.OpenFeatureClass2("DLTBBG");
                    if (TempFCApi != null && s_WsAPI != null)
                        TempFCApi.FcToFc(ImproDataLayer.FeatureClass, null, false);
                }
                ImproDataLayer = null;
                TempFCApi = null;
                s_WsAPI = null;
                if (cbOverlayZLData.IsChecked == true)
                {
                    s_WsAPI = new WorkspaceAPI(System.IO.Path.Combine(SelectPathName, "ZLDB.gdb"), WorkspaceTypeEnum.GDBFile, true);
                    if (s_WsAPI == null) ZLlays.Clear();
                    foreach (var item in ZLlays)
                    {
                        this.UpdateMsg($"正在进行{item}数据覆盖中.......");
                        ImproDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName(item);
                        if (ImproDataLayer == null) continue;
                        if (ImproDataLayer != null && ImproDataLayer.FeatureClass != null)
                            (ImproDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Delete From {item} WHERE 1=1");
                        TempFCApi = s_WsAPI.OpenFeatureClass2(item);
                        if (TempFCApi != null && ImproDataLayer.FeatureClass != null && TempFCApi.FeatureClass.FeatureCount(null) != 0)
                            TempFCApi.FcToFc(ImproDataLayer.FeatureClass, null, false);
                        TempFCApi = null;
                    }
                }
                ImproDataLayer = null;
                s_WsAPI = null;
                if (cbOverlayNMData.IsChecked == true)
                {
                    this.UpdateMsg($"正在进行DLTB_NMK数据覆盖中.......");
                    s_WsAPI = new WorkspaceAPI(System.IO.Path.Combine(SelectPathName, "NMDB.gdb"), WorkspaceTypeEnum.GDBFile, true);
                    ImproDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB_NMK");
                    if (ImproDataLayer != null)
                    {
                        if (ImproDataLayer != null && ImproDataLayer.FeatureClass != null)
                            (ImproDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTB_NMK WHERE 1=1");
                        TempFCApi = s_WsAPI.OpenFeatureClass2("DLTB_NMK");
                        if (TempFCApi != null && s_WsAPI != null)
                            TempFCApi.FcToFc(ImproDataLayer.FeatureClass, null, false);
                    }
                }
                this.CloseLoading();
                MessageHelper.ShowTips("覆盖数据成功!");
            }
            catch (Exception ex)
            {
                this.CloseLoading();
                LogAPI.Debug("覆盖数据异常:" + ex);
                MessageHelper.ShowTips("覆盖数据异常:" + ex.Message);
            }
            finally
            {
                this.CloseLoading();
                s_WsAPI?.CloseWorkspace();
                TempFCApi?.CloseFeatureClass();
            }
        }
        private void BtnClose_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        private void BtnDele_Click(object sender, RoutedEventArgs e)
        {
            IFeatureLayer DeleDataLayer = null;
            try
            {
                if (cbOverlayBGData.IsChecked == false && cbOverlayZLData.IsChecked == false && cbOverlayNMData.IsChecked == false)
                {
                    MessageHelper.ShowTips("清除数据至少勾选一项进行清除!");
                    return;
                }
                this.ShowLoading("正在进行数据清除中.......", 0, 0);
                if (cbOverlayBGData.IsChecked == true)
                {
                    this.UpdateMsg($"正在进行DLTBBG数据清除中.......");
                    DeleDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName("DLTBBG");
                    if (DeleDataLayer != null && DeleDataLayer.FeatureClass != null)
                        (DeleDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTBBG WHERE 1=1");
                }
                if (cbOverlayZLData.IsChecked == true)
                {
                    foreach (var item in ZLlays)
                    {
                        this.UpdateMsg($"正在进行{item}数据清除中.......");
                        DeleDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName(item);
                        if (DeleDataLayer != null && DeleDataLayer.FeatureClass != null)
                            (DeleDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL($"Delete From {item} WHERE 1=1");
                    }
                }
                if (cbOverlayNMData.IsChecked == true)
                {
                    this.UpdateMsg($"正在进行DLTB_NMK数据清除中.......");
                    DeleDataLayer = KGIS.Framework.Maps.MapsManager.Instance.MapService.GetFeatureLayerByName("DLTB_NMK");
                    if (DeleDataLayer != null && DeleDataLayer.FeatureClass != null)
                        (DeleDataLayer.FeatureClass as FeatureClass).Workspace.ExecuteSQL("Delete From DLTB_NMK WHERE 1=1");
                }
                this.CloseLoading();
                KGIS.Framework.Maps.MapsManager.Instance.MapService.getAxMapControl().ActiveView.Refresh();
                MessageHelper.ShowTips("清除数据结束!");
            }
            catch (Exception ex)
            {
                this.CloseLoading();
                PluginServiceInterface.CommonHelper.RecordsErrLog("数据覆盖-清除数据异常", ex);
                MessageHelper.ShowTips("清除数据异常:" + ex.Message);
            }
            finally
            {
                if (DeleDataLayer != null && DeleDataLayer.FeatureClass != null)
                    Marshal.ReleaseComObject(DeleDataLayer);
            }
        }
    }
}