using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geometry;
//using Kingo.Plugin.EngineEditor.ViewModel;
using System.Collections.Generic;
using System.Data;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;
using System.Windows.Media;
namespace Kingo.Plugin.EngineEditor.View
{
    /// 
    /// FrmInterData2.xaml 的交互逻辑
    /// 
    public partial class FrmInterData2 : Window
    {
        private IFeatureLayer _featureLayer;
        private IGeometry _geometry;
        SolidColorBrush foregroundColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FF6C8FD6"));
        SolidColorBrush lableColor = new SolidColorBrush((Color)ColorConverter.ConvertFromString("#FFFFFFFF"));
        public Dictionary Dic { get; set; }
        public FrmInterData2()
        {
            InitializeComponent();
        }
        public IGeometry Geometry
        {
            get => _geometry;
            set
            {
                _geometry = value;
            }
        }
        public void DataInfStyle(Dictionary Keys)
        {
            spResult.Children.Clear();
            DataTable data = Keys["图斑压盖"];
            int i = 1;
            Border border = new Border();
            border.BorderBrush = Brushes.AliceBlue;
            border.BorderThickness = new Thickness(1,1,1,1);
            border.Margin = new Thickness(10,0,10,10);
            Border Checkborder = new Border();
            Checkborder.BorderBrush = Brushes.AliceBlue;
            Checkborder.BorderThickness = new Thickness(1, 1, 1, 1);
            Checkborder.Margin = new Thickness(10, 0, 10, 10);
            Grid GeoOverInfor = new Grid();
            Grid CheckContext = new Grid();
            GeoOverInfor.Children.Clear();
            CheckContext.Children.Clear();
            if (GeoOverInfor.RowDefinitions.Count > 1)
                GeoOverInfor.RowDefinitions.RemoveRange(1, GeoOverInfor.RowDefinitions.Count - 1);
            if (CheckContext.RowDefinitions.Count > 1)
                CheckContext.RowDefinitions.RemoveRange(1, CheckContext.RowDefinitions.Count - 1);
            if (GeoOverInfor.ColumnDefinitions.Count > 1)
                GeoOverInfor.ColumnDefinitions.RemoveRange(1, GeoOverInfor.ColumnDefinitions.Count - 1);
            if (CheckContext.ColumnDefinitions.Count > 1)
                CheckContext.ColumnDefinitions.RemoveRange(1, CheckContext.ColumnDefinitions.Count - 1);
            TableTitle(GeoOverInfor, data.Columns, foregroundColor, lableColor);
            foreach (DataRow row in data.Rows)
            {
                GeoOverInfor.RowDefinitions.Add(new RowDefinition());
                for (int ii = 0; ii < data.Columns.Count; ii++)
                {
                    SetStyle(GeoOverInfor, row[ii].ToString(), i, ii);
                }
                i++;
            }
            border.Child = GeoOverInfor;
            spResult.Children.Add(border);
            data = Keys["图形规范性"];
            i = 1;
            TableTitle(CheckContext, data.Columns, foregroundColor, lableColor);
            foreach (DataRow row in data.Rows)
            {
                CheckContext.RowDefinitions.Add(new RowDefinition());
                for (int ii = 0; ii < data.Columns.Count; ii++)
                {
                    if (data.Columns[ii].ColumnName == "检查项")
                    {
                        SetStyle(CheckContext, row[ii].ToString(), i, ii, foregroundColor, lableColor);
                    }
                    else
                    {
                        SetStyle(CheckContext, row[ii].ToString(), i, ii);
                    }
                }
                i++;
            }
            Checkborder.Child = CheckContext;
        }
        public void TableTitle(Grid grid, DataColumnCollection columns, SolidColorBrush foregroundColor, SolidColorBrush LableColor)
        {
            grid.RowDefinitions.Add(new RowDefinition());
            for (int i = 0; i < columns.Count ; i++)
            {
                grid.ColumnDefinitions.Add(new ColumnDefinition());
            }
            for (int i = 0; i < columns.Count; i++)
            {
                Border border = new Border();
                border.BorderThickness = new Thickness(0.5, 0.5, 0.5, 0.5);
                border.BorderBrush = Brushes.White;
                border.SetValue(Grid.RowSpanProperty, 1);
                border.SetValue(Grid.ColumnProperty, i);
                Label label = new Label();
                label.Background = foregroundColor;
                label.Foreground = LableColor;
                label.Content = Dic[columns[i].ColumnName];
                label.Margin = new Thickness(1,0,0,0);
                Grid.SetColumn(label, i);
                Grid.SetRow(label, 0);
                grid.Children.Add(label);
                grid.Children.Add(border);
            }
        }
        private void SetStyle(Grid grid, string value, int RowIndex, int ColumnIndex)
        {
            Border border = new Border();
            border.BorderThickness = new Thickness(0.5, 0.5, 0.5, 0.5);
            //border.BorderBrush = Brushes.Gray;
            border.SetValue(Grid.RowSpanProperty, RowIndex + 1);
            border.SetValue(Grid.ColumnProperty, ColumnIndex);
            grid.Children.Add(border);
            Label label = new Label();
            label.Content = value;
            if (RowIndex % 2 == 0)
            {
                label.Background = Brushes.AliceBlue;
            }
            else
                label.Background = Brushes.White;
            grid.Children.Add(label);
            Grid.SetColumn(label, ColumnIndex);
            Grid.SetRow(label, RowIndex);
        }
        private void SetStyle(Grid grid, string value, int RowIndex, int ColumnIndex, SolidColorBrush foregroundColor, SolidColorBrush labelcolor)
        {
            Border border = new Border();
            border.BorderThickness = new Thickness(0.5, 0.5, 0.5, 0.5);
            Label label = new Label();
            label.Background = foregroundColor;
            label.Foreground = labelcolor;
            label.Content = value;
            Grid.SetColumn(label, ColumnIndex);
            Grid.SetRow(label, RowIndex);
            grid.Children.Add(label);
            grid.Children.Add(border);
        }
        public void ShowData()
        {
            this.Show();
        }
        public void GeoDealWith(IGeometry geometry, IFeatureLayer layer)
        {
            FeatureLayer = layer;
            Geometry = geometry;
        }
        public IFeatureLayer FeatureLayer
        {
            get => _featureLayer;
            set
            {
                _featureLayer = value;
            }
        }
        private void Button_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            this.DragMove();
        }
        private void Button_PreviewMouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            if (popContent.Visibility == Visibility.Collapsed)
            {
                popContent.Visibility = Visibility.Visible;
            }
            else
                popContent.Visibility = Visibility.Collapsed;
        }
        private void btnClose_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        private void btnClosePage_Click(object sender, RoutedEventArgs e)
        {
            popContent.Visibility = Visibility.Collapsed;
        }
    }
}