using System;
using System.Collections.Generic;
using System.Diagnostics;
using ComPDFKitViewer.PdfViewer;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Documents;
using static System.Windows.Forms.VisualStyles.VisualStyleElement;
using ComPDFKit.PDFDocument;
using PDF_Office.Model.EditTools.Bates;

namespace PDF_Office.Helper
{
    public static class HomePageEditHelper
    {
        /// <summary>
        /// 获取所需要分文档份数
        /// </summary>
        /// <param name="pagecontent">文档总页数</param>
        /// <param name="averagepage">平均几页分为一个文档</param>
        /// <param name="remainder">最后文档的页数的引用 例如11页文档每3页为一份PDF,3,3,3,2,remainder=2</param>
        /// <returns></returns>
        public static int AverageSplitPages(int pagecontent, int averagepage, ref int remainder)
        {
            if (pagecontent <= 0)
            {
                remainder = 0;
                return 0;
            }
            if (pagecontent <= averagepage)
            {
                remainder = pagecontent;

                return 1;
            }
            if (pagecontent > averagepage)
            {
                if (pagecontent % averagepage == 0)
                {
                    remainder = 0;
                    return pagecontent / averagepage;
                }
                remainder = pagecontent % averagepage;
                return (pagecontent / averagepage) + 1;

            }
            remainder = 0;
            return -1;
        }
        /// <summary>
        /// 获取平均每个文档的页数
        /// </summary>
        /// <param name="pagecontent">文档总页数</param>
        /// <param name="averagedoc">平均几页分为一个文档</param>
        /// <param name="remainder">引用,截至第几位文档比后面文档多一 例如11页文档 分为3份 4,4,3 remainder为2 第一个文档和第二文档比后续文档多一</param>
        /// <returns></returns>
        public static int AverageSplitDocs(int pagecontent, int averagedoc, ref int remainder)
        {
            if (pagecontent <= 0)
            {
                remainder = 0;
                return 0;
            }
            if (pagecontent <= averagedoc)
            {
                remainder = 0;
                return 1;
            }
            if (pagecontent > averagedoc)
            {
                remainder = pagecontent % averagedoc;
                return pagecontent / averagedoc;
            }
            return 0;

        }

        public static void GetPagerange(string PageRangeSelectIndex, CPDFViewer currentViewer, ref string pageRange, string pageRangeText, bool currentpage = false, string currentPageRange="1")
        {
            if (!currentpage)
            {
                if (PageRangeSelectIndex == "0")
                {
                    pageRange = "1-" + currentViewer.Document.PageCount.ToString();
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else if (PageRangeSelectIndex == "1")
                {
                    pageRange = "1";
                    for (int i = 3; i <= currentViewer.Document.PageCount; i += 2)
                        pageRange = pageRange + "," + i;
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else if (PageRangeSelectIndex == "2")
                {
                    pageRange = "2";
                    for (int i = 4; i <= currentViewer.Document.PageCount; i += 2)
                        pageRange = pageRange + "," + i;
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);

                }
                else if (PageRangeSelectIndex == "3")
                {
                    if (pageRangeText != "")
                    {
                        pageRange = pageRangeText;
                    }
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else { return; }
            }
            else
            {
                if (PageRangeSelectIndex == "0")
                {
                    pageRange = "1-" + currentViewer.Document.PageCount.ToString();
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                if (PageRangeSelectIndex == "1")
                {
                    pageRange = currentPageRange;
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else if (PageRangeSelectIndex == "2")
                {
                    pageRange = "1";
                    for (int i = 3; i <= currentViewer.Document.PageCount; i += 2)
                        pageRange = pageRange + "," + i;
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else if (PageRangeSelectIndex == "3")
                {
                    pageRange = "2";
                    for (int i = 4; i <= currentViewer.Document.PageCount; i += 2)
                        pageRange = pageRange + "," + i;
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);

                }
                else if (PageRangeSelectIndex == "4")
                {
                    if (pageRangeText != "")
                    {
                        pageRange = pageRangeText;
                    }
                    Trace.WriteLine(" extractModel.PageRange" + pageRange);
                }
                else { return; }

            }
        }

        public static string UpDataPageRange(int pagecount,string pagerange) {

            List<int> PageIndexLists = new List<int>();
            string str = "";
            if(CommonHelper.GetPagesInRange(ref PageIndexLists, pagerange, 9999, new char[] { ',' }, new char[] { '-' }))
            {
                
                foreach (var PageIndex in PageIndexLists) {
                   int pageindex = PageIndex + 1;
                    if (pageindex<= pagecount)
                    {
                        str = str + pageindex.ToString();
                        str = str + ",";
                    }
                }
                if(str=="")
                    return str;
                return str.Remove(str.LastIndexOf(","),1);
            }
            return str;
        }

        public static string ReverseDate(string str,CPDFDocument Document)
        {
            string yyyy = DateTime.Now.ToString("yyyy");
            string yy = DateTime.Now.ToString("yy");
            string mm = DateTime.Now.ToString("MM");
            string m = DateTime.Now.ToString("%M");
            string dd = DateTime.Now.ToString("dd");
            string d = DateTime.Now.ToString("%d");
            str = str.Replace("<<m/d>>", m + "/" + d)
            .Replace("<<m/d/yy>>", m + "/" + d + "/" + yy)
            .Replace("<<m/d/yyyy>>", m + "/" + d + "/" + yyyy)
            .Replace("<<mm/dd/yy>>", mm + "/" + dd + "/" + yy)
            .Replace("<<mm/dd/yyyy>>", mm + "/" + dd + "/" + yyyy)
            .Replace("<<d/m/yy>>", d + "/" + m + "/" + yy)
            .Replace("<<d/m/yyyy>>", d + "/" + m + "/" + yyyy)
            .Replace("<<dd/mm/yy>>", dd + "/" + mm + "/" + yy)
            .Replace("<<dd/mm/yyyy>>", dd + "/" + mm + "/" + yyyy)
            .Replace("<<mm/yy>>", mm + "/" + yy)
            .Replace("<<mm/yyyy>>", mm + "/" + yyyy)
            .Replace("<<m.d.yy>>", m + "." + d + "." + yy)
            .Replace("<<m.d.yyyy>>", m + "." + d + "." + yyyy)
            .Replace("<<mm.dd.yy>>", mm + "." + dd + "." + yy)
            .Replace("<<mm.dd.yyyy>>", mm + "." + dd + "." + yyyy)
            .Replace("<<mm.yy>>", mm + "." + yy)
            .Replace("<<mm.yyyy>>", mm + "." + yyyy)
            .Replace("<<d.m.yy>>", d + "." + m + "." + yy)
            .Replace("<<d.m.yyyy>>", d + "." + m + "." + yyyy)
            .Replace("<<dd.mm.yy>>", dd + "." + mm + "." + yy)
            .Replace("<<dd.mm.yyyy>>", dd + "." + mm + "." + yyyy)
            .Replace("<<yy-mm-dd>>", yy + "-" + mm + "-" + dd)
            .Replace("<<yyyy-mm-dd>>", yyyy + "-" + mm + "-" + dd)
            .Replace("<<1 of n>>", "<<1>>" + " of " + Document.PageCount)
            .Replace("<<1/n>>", "<<1>>" + "/" + Document.PageCount)
            .Replace("<<Page 1>>", "Page" + "<<1>>")
            .Replace("<<Page 1 of n>>", "Page " + "<<1>>" + " of " + Document.PageCount);
            return str;
        }
    }

}