using ComPDFKit.Import;
using ComPDFKit.PDFAnnotation;
using ComPDFKit.PDFDocument;
using ComPDFKit.PDFPage;
using ComPDFKitViewer;
using ComPDFKitViewer.AnnotEvent;
using ComPDFKitViewer.PdfViewer;
using PDF_Office.Helper;
using PDF_Office.Model.BOTA;
using PDF_Office.ViewModels.BOTA;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Forms;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace PDF_Office.Views.BOTA
{
    /// <summary>
    /// AnnotationListItem.xaml 的交互逻辑
    /// </summary>
    public partial class AnnotationListItem : System.Windows.Controls.UserControl
    {
        //private Brush strikeoutColor = new SolidColorBrush(Color.FromRgb(0xFF, 0xBB, 0x00));
        public AnnotationListItem()
        {
            InitializeComponent();
        }

        private void GridIco_Loaded(object sender, RoutedEventArgs e)
        {
            Grid grid = e.Source as Grid;
            var args = grid.DataContext as AnnotationHandlerEventArgs;
            AnnotHandlerEventArgs data = args.AnnotHandlerEventArgs;
            if (data == null)
            {
                return;
            }

            switch (data.EventType)
            {
                case AnnotArgsType.AnnotFreeText:
                    BtnAnnotFreeText.Visibility = Visibility.Visible;
                    TxbMarkUpContent.Foreground = new SolidColorBrush((data as FreeTextAnnotArgs).FontColor);
                    break;

                case AnnotArgsType.AnnotHighlight:
                    BtnHighlight.Visibility = Visibility.Visible;
                    PathHighlight.Background = new SolidColorBrush((data as TextHighlightAnnotArgs).Color);
                    //TxbContext.Text = data.Content;
                    if (!string.IsNullOrEmpty(TxbContext.Text))
                    {
                        TxbContext.Background = new SolidColorBrush((data as TextHighlightAnnotArgs).Color);
                    }

                    break;

                case AnnotArgsType.AnnotFreehand:
                    BtnFreeHand.Visibility = Visibility.Visible;
                    PathFreehand.Fill = new SolidColorBrush((data as FreehandAnnotArgs).InkColor);
                    ImageContext.Visibility = Visibility.Visible;

                    TxbContext.Visibility = Visibility.Collapsed;

                    //var encoder = new PngBitmapEncoder();
                    //encoder.Frames.Add(BitmapFrame.Create((BitmapSource)ImageContext.Source));
                    //FileStream file = new FileStream(String.Format($@"C:\Users\oyxh\Desktop\images\PDFText\{data.AnnotIndex}.png"), FileMode.Create);
                    //encoder.Save(file);
                    //file.Close();

                    break;

                case AnnotArgsType.AnnotSquiggly://波浪线
                    AnnotSquiggly.Visibility = Visibility.Visible;
                    AnnotSquigglycolor.Stroke = new SolidColorBrush((data as TextSquigglyAnnotArgs).Color);

                    #region TO DO

                    //TextDecoration mySquiggly = new TextDecoration();
                    //Pen myPen = new Pen();
                    //myPen.Brush = new SolidColorBrush((data as TextSquigglyAnnotArgs).Color);
                    //myPen.Brush.Opacity = 0.8;
                    //myPen.Thickness = 2;
                    //myPen.DashStyle = DashStyles.Dash;
                    //mySquiggly.Pen = myPen;
                    //mySquiggly.PenThicknessUnit = TextDecorationUnit.FontRecommended;

                    //TextDecorationCollection myCollection = new TextDecorationCollection();
                    //myCollection.Add(mySquiggly);
                    //TxbContext.TextDecorations = myCollection;

                    #endregion TO DO

                    break;

                case AnnotArgsType.AnnotStamp:
                    BtnAnnotStamp.Visibility = Visibility.Visible;
                    break;

                case AnnotArgsType.AnnotStrikeout://删除线
                    BtnAnnotStrikeout.Visibility = Visibility.Visible;

                    PathStrikeoutyColor.Fill = new SolidColorBrush((data as TextStrikeoutAnnotArgs).Color);

                    #region to do

                    TextDecoration myStrikeout = new TextDecoration();
                    Pen myPen2 = new Pen();
                    myPen2.Brush = new SolidColorBrush((data as TextStrikeoutAnnotArgs).Color);
                    myPen2.Brush.Opacity = 0.8;
                    myPen2.Thickness = 2;
                    myStrikeout.Pen = myPen2;
                    myStrikeout.PenOffset = -4;
                    myStrikeout.PenThicknessUnit = TextDecorationUnit.FontRecommended;
                    TextDecorationCollection myCollection2 = new TextDecorationCollection();
                    myCollection2.Add(myStrikeout);
                    //因为波浪线无法实现 暂时只显示文字 不显示下划线，删除线等
                    TxbContext.TextDecorations = myCollection2;

                    #endregion to do

                    break;

                case AnnotArgsType.AnnotSticky://便签
                    BtnAnnotSticky.Visibility = Visibility;
                    PathSticky.Fill = new SolidColorBrush((data as StickyAnnotArgs).Color);
                    break;

                case AnnotArgsType.AnnotUnderline:
                    BtnUnderLine.Visibility = Visibility.Visible;
                    RectangleUnderline.Fill = new SolidColorBrush((data as TextUnderlineAnnotArgs).Color);

                    #region TO DO

                    TextDecoration myUnderline = new TextDecoration();
                    Pen myPen1 = new Pen();
                    myPen1.Brush = new SolidColorBrush((data as TextUnderlineAnnotArgs).Color);
                    myPen1.Brush.Opacity = 0.8;
                    myPen1.Thickness = 2;
                    myUnderline.Pen = myPen1;
                    myUnderline.PenThicknessUnit = TextDecorationUnit.FontRecommended;
                    TextDecorationCollection myCollection1 = new TextDecorationCollection();
                    myCollection1.Add(myUnderline);
                    TxbContext.TextDecorations = myCollection1;

                    #endregion TO DO

                    break;

                case AnnotArgsType.AnnotLine:
                    if ((data as LineAnnotArgs).HeadLineType >= (C_LINE_TYPE)1 || (data as LineAnnotArgs).TailLineType >= (C_LINE_TYPE)1)
                    {
                        BtnSharpArrow.Visibility = Visibility.Visible;
                        PathArrow.Fill = new SolidColorBrush((data as LineAnnotArgs).LineColor);
                    }
                    else
                    {
                        PathSharpLine.Fill = new SolidColorBrush((data as LineAnnotArgs).LineColor);
                        BtnSharpLine.Visibility = Visibility.Visible;
                    }
                    ///对于形状注释等只有Note 的处理
                    if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
                    {
                        TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
                        TxbContext.Text = "";
                    }
                    break;

                case AnnotArgsType.AnnotSquare:
                    BtnAnnotSquare.Visibility = Visibility.Visible;
                    RectAnnotSquare.Stroke = new SolidColorBrush((data as SquareAnnotArgs).LineColor);
                    RectAnnotSquare.Fill = new SolidColorBrush((data as SquareAnnotArgs).BgColor);
                    ///对于形状注释等只有Note 的处理
                    if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
                    {
                        TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
                        TxbContext.Text = "";
                    }
                    break;

                case AnnotArgsType.AnnotCircle:
                    BtnAnnotCircle.Visibility = Visibility.Visible;
                    EllipseCircle.Stroke = new SolidColorBrush((data as CircleAnnotArgs).LineColor);
                    EllipseCircle.Fill = new SolidColorBrush((data as CircleAnnotArgs).BgColor);
                    ///对于形状注释等只有Note 的处理
                    if (!string.IsNullOrEmpty(data.Content) && string.IsNullOrEmpty(data.MarkupContent))
                    {
                        TxbMarkUpContent.Text = Regex.Replace(data.Content, "[\r\n]", " ");
                        TxbContext.Text = "";
                    }
                    break;

                case AnnotArgsType.AnnotLink:
                    BtnAnnotLink.Visibility = Visibility.Visible;
                    if (data is LinkAnnotArgs linkAnnotArgs)
                    {
                        //Dictionary<AnnotAttrib, object> annotAttribsList = new Dictionary<AnnotAttrib, object>();
                        //annotAttribsList[AnnotAttrib.LinkType] = linkAnnotArgs.LinkType;
                        //annotAttribsList[AnnotAttrib.LinkUri] = linkAnnotArgs.URI;
                        //annotAttribsList[AnnotAttrib.LinkDestIndx] = linkAnnotArgs.DestIndex;
                        //AnnotAttribEvent annotAttribEvent = AnnotAttribEvent.GetAnnotAttribEvent(linkAnnotArgs, annotAttribsList);
                        if (string.IsNullOrEmpty(linkAnnotArgs.Content))
                        {
                            //if(data.)
                            TxbContext.Text = string.Format($"To Page {linkAnnotArgs.PageIndex}");
                        }
                    }

                    break;

                default:
                    break;
            }
        }
    }
}