using Prism.Mvvm;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PDF_Office.Model.HomePageToolsDialogs
{
    public class HomePageSplitDialogModel:BindableBase
    {

        /// <summary>
        /// 拆分模式
        /// </summary>
        public SplitMode Mode = SplitMode.AveragePages;
        /// <summary>
        /// 页面范围形式
        /// </summary>
        public PageRangeMode PageMode = PageRangeMode.OddPage;
        /// <summary>
        /// 拆分模式份数或者页数
        /// </summary>
        public int GetModeCount = 1;
        /// <summary>
        /// 页面信息
        /// </summary>
        public string PageRange = "1,3-4,10";

        private int pageSelectedIndex = 1;

        public int PageSelectedIndex
        {
            get { return pageSelectedIndex; }
            set
            {
                SetProperty(ref pageSelectedIndex, value);
                switch (value)
                {
                    case 1:
                        PageMode = PageRangeMode.OddPage;
                        break;
                    case 2:
                        PageMode = PageRangeMode.EvenPage;
                        break;
                    case 3:
                        PageMode = PageRangeMode.CustomPage;
                        break;
                    default:
                        break;
                }
            }
        }



        private double pageNum = 1;
        /// <summary>
        /// 平均页数
        /// </summary>
        public double PageNum
        {
            get { return pageNum; }
            set
            {
                SetProperty(ref pageNum, value);
                GetModeCount = (int)value;
            }
        }

        private double filesCount = 1;
        /// <summary>
        /// 平均文件数
        /// </summary>
        public double FilesCount
        {
            get { return filesCount; }
            set
            {
                SetProperty(ref filesCount, value);
                GetModeCount = (int)value;
            }
        }

        private bool isAveragePages = true;
        /// <summary>
        /// 平均按页拆分 是否选中
        /// </summary>
        public bool IsAveragePages
        {
            get { return isAveragePages; }
            set
            {
                SetProperty(ref isAveragePages, value);
                if(value)
                {
                    Mode = SplitMode.AveragePages;
                }
            }
        }

        private bool isAveragePDF = false;
        /// <summary>
        /// 平均按PDF拆分 是否选中
        /// </summary>
        public bool IsAveragePDF
        {
            get { return isAveragePDF; }
            set
            {
                SetProperty(ref isAveragePDF, value);
                if (value)
                {
                    Mode = SplitMode.AverageFiles;
                }
            }
        }


        private bool isCustomRange = false;
        /// <summary>
        /// 自定义页面范围,是否选中
        /// </summary>

        public bool IsCustomRange
        {
            get { return isCustomRange; }
            set
            {
                SetProperty(ref isCustomRange, value);
                if (value)
                {
                    Mode = SplitMode.CustomPageRange;
                }
            }
        }

        /// <summary>
        /// 文件名标签
        /// </summary>
        private string fileNameLabel = "part";

        public string FileNameLabel
        {
            get { return fileNameLabel; }
            set
            {
                SetProperty(ref fileNameLabel, value);
                RefreshFileName();
            }
        }

        private bool hasLabel = true;
        /// <summary>
        /// 是否含有标签
        /// </summary>
        public bool HasLabel
        {
            get { return hasLabel; }
            set
            {
                SetProperty(ref hasLabel, value);
                RefreshFileName();
            }
        }


        /// <summary>
        /// 文件名与标签分隔符
        /// </summary>
        private string fileNameDeimiter="-";

        public string FileNameDeimiter
        {
            get { return fileNameDeimiter; }
            set
            {
                SetProperty(ref fileNameDeimiter, value);
                RefreshFileName();
            }
        }

        private bool hasDeimiter = true;
        /// <summary>
        /// 是否含有分隔符
        /// </summary>
        public bool HasDeimiter
        {
            get { return hasDeimiter; }
            set
            {
                SetProperty(ref hasDeimiter, value);
                RefreshFileName();
            }
        }


        /// <summary>
        /// 文件名与标签分隔符
        /// </summary>
        public bool FrontFileName = true;
        /// <summary>
        /// 页码 存入页码范围;
        /// </summary>
        public List<int> PageParm = new List<int> { };
        /// <summary>
        /// 文件名;
        /// </summary>
        private string fileName = "";

        public string FileName
        {
            get { return fileName; }
            set
            {
                SetProperty(ref fileName, value);
            }
        }

        private bool isSourceNameFront = true;
        /// <summary>
        /// 原始文档名前置
        /// </summary>
        public bool  IsSourceNameFront
        {
            get { return isSourceNameFront; }
            set
            {
                SetProperty(ref isSourceNameFront, value);
                RefreshFileName();
            }
        }

        private string sourceName;
        /// <summary>
        /// 原始文件名
        /// </summary>
        public string SourceFileName
        {
            get { return sourceName; }
            set
            {
                SetProperty(ref sourceName, value);
                RefreshFileName();
            }
        }

        /// <summary>
        /// 刷新文件名
        /// </summary>
        public void RefreshFileName()
        {
            string label = HasLabel ? FileNameLabel : "";
            string deimiter = hasDeimiter ? FileNameDeimiter : "";
            if(isSourceNameFront)
            {
                FileName = SourceFileName + deimiter + label + ".pdf";
            }
            else
            {
                FileName = label + deimiter + SourceFileName + ".pdf";
            }
        }

        public enum SplitMode
        {
            /// <summary>
            /// 按页平均拆分
            /// </summary>
            AveragePages,
            /// <summary>
            /// 按文件平均拆分
            /// </summary>
            AverageFiles,
            /// <summary>
            /// 自定义页码范围拆分
            /// </summary>
            CustomPageRange
        }

        public enum PageRangeMode
        {
            /// <summary>
            /// 奇数页
            /// </summary>
            OddPage,
            /// <summary>
            /// 偶数页
            /// </summary>
            EvenPage,
            /// <summary>
            /// 自定义页面范围
            /// </summary>
            CustomPage
        }
    }
}