using ComPDFKitViewer.AnnotEvent;
using Microsoft.Office.Interop.Excel;
using PDF_Master.ViewModels.PropertyPanel.AnnotPanel;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Markup;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace PDF_Master.Views.PropertyPanel.AnnotPanel
{
    /// <summary>
    /// StickyNoteProperty.xaml 的交互逻辑
    /// </summary>
    public partial class StickyNoteProperty : UserControl
    {
        private StickyNotePropertyViewModel ViewModel => DataContext as StickyNotePropertyViewModel;

        public StickyNoteProperty()
        {
            InitializeComponent();
            cusColor.SelectedColorHandler += cusColor_SelectedColor;
        }

        private void ViewModel_LoadPropertyHandler(object sender, object e)
        {
            var item = e as AnnotHandlerEventArgs;
            switch (item.EventType)
            {
                case AnnotArgsType.AnnotHighlight:
                    {
                        var annot = item as TextHighlightAnnotArgs;
                        if (annot != null)
                        {
                            cusColor.SelectedColor = annot.Color;
                            SlidOpacity.SetSliOpacity(annot.Transparency);
                        }
                        break;
                    }

                case AnnotArgsType.AnnotUnderline:
                    {
                        var annot = item as TextUnderlineAnnotArgs;
                        if (annot != null)
                        {
                            cusColor.SelectedColor = annot.Color;
                            SlidOpacity.SetSliOpacity(annot.Transparency);
                        }
                        break;
                    }

                case AnnotArgsType.AnnotStrikeout:
                    {
                        var annot = item as TextStrikeoutAnnotArgs;
                        if (annot != null)
                        {
                            cusColor.SelectedColor = annot.Color;
                            SlidOpacity.SetSliOpacity(annot.Transparency);
                        }
                        break;
                    }
            }
        }

        private void SlidOpacity_SelectedValue(object sender, double e)
        {
            //if (ViewModel != null)
            //{
            //    ViewModel.SelectedValueChangedCommand?.Execute(e);
            //}
        }

        private void cusColor_SelectedColor(object sender, Color e)
        {
            if (ViewModel != null)
            {
                ViewModel.SelectedColorChangedCommand?.Execute(e);
            }
        }

        private void UserControl_Loaded(object sender, RoutedEventArgs e)
        {
            if (ViewModel != null)
            {
                var converter = TypeDescriptor.GetConverter(typeof(Geometry));
                switch (ViewModel.strOtherTag)
                {
                    case "Comment":
                        BtnComment.IsChecked = true;
                        var dataComment = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataComment);
                        break;

                    case "Note":
                        BtnNote.IsChecked = true;
                        var dataNote = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataNote);
                        break;

                    case "Key":
                        BtnKey.IsChecked = true;
                        var dataKey = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataKey);
                        break;

                    case "Help":
                        BtnHelp.IsChecked = true;
                        var dataHelp = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataHelp);
                        break;

                    case "Insert":
                        BtnInsert.IsChecked = true;
                        var dataInsert = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataInsert);
                        break;

                    case "Paragraph":
                        BtnParagraph.IsChecked = true;
                        var dataParagraph = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataParagraph);
                        break;

                    case "NewParagraph":
                        BtnNewParagraph.IsChecked = true;
                        var dataNewParagraph = ViewModel.StickyNoteTypes[ViewModel.strOtherTag];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(dataNewParagraph);
                        break;

                    case "None":
                        BtnComment.IsChecked = false;
                        BtnNote.IsChecked = false;
                        BtnKey.IsChecked = false;
                        BtnHelp.IsChecked = false;
                        BtnInsert.IsChecked = false;
                        BtnParagraph.IsChecked = false;
                        BtnNewParagraph.IsChecked = false;
                        break;

                    default:
                        BtnComment.IsChecked = true;
                        var datacomment = ViewModel.StickyNoteTypes["Comment"];
                        ViewModel.ExmpleData = (Geometry)converter.ConvertFrom(datacomment);
                        break;
                }
                if (ViewModel.IsFirst)
                {
                    //暂时解决方案,让其先等于高保真所需的默认值,然后在变为注释setting默认颜色值
                    ViewModel.SharpCurrentColor = App.Current.FindResource("color.sys.layout.divider.note") as Brush;
                    ViewModel.SharpColor = ViewModel.SharpColor;
                    ViewModel.IsFirst = false;
                }
            }

            //  cusColor.SelectedColorHandler -= cusColor_SelectedColor;
            //   cusColor.SelectedColorHandler += cusColor_SelectedColor;

            // SlidOpacity.SelectedValueChanged -= SlidOpacity_SelectedValue;
            // SlidOpacity.SelectedValueChanged += SlidOpacity_SelectedValue;

            //   ViewModel.LoadPropertyHandler -= ViewModel_LoadPropertyHandler;
            //   ViewModel.LoadPropertyHandler += ViewModel_LoadPropertyHandler;
        }

        private void UserControl_Unloaded(object sender, RoutedEventArgs e)
        {
            //  cusColor.SelectedColorHandler -= cusColor_SelectedColor;
            // SlidOpacity.SelectedValueChanged -= SlidOpacity_SelectedValue;
            //  ViewModel.LoadPropertyHandler -= ViewModel_LoadPropertyHandler;
        }
    }
}