using ComPDFKit.PDFDocument;
using PDF_Office.Model.Dialog.ToolsDialogs;
using PDF_Office.Model;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Services.Dialogs;
using System;
using System.Diagnostics;
using System.Windows.Forms;
using System.Windows;
using DialogResult = Prism.Services.Dialogs.DialogResult;
using MessageBox = System.Windows.Forms.MessageBox;
using PDF_Office.Helper;
using ComPDFKitViewer.PdfViewer;
using PDF_Office.Model.Dialog.HomePageToolsDialogs.HomePageBatchProcessing;
using System.Linq;
using System.Collections.Generic;

namespace PDF_Office.ViewModels.Dialog.ToolsDialogs.CompressDialogs
{
    public class CompressDialogViewModel : BindableBase, IDialogAware
    {
        #region 参数和属性
        private CompressDialogModel compressDialogModel;
        private IntPtr compressingIntpr = IntPtr.Zero;
        private CPDFDocument document;
        private CPDFViewer pdfviewer;
        public IDialogService dialogs;

        
        #endregion

        #region 委托声明
        public DelegateCommand LargeQualityCommand { get; set; }

        public DelegateCommand StandardQualityCommand { get; set; }

        public DelegateCommand LittleQualityCommand { get; set; }

        public DelegateCommand MicroQualityCommand { get; set; }

        public DelegateCommand CompressCommand { get; set; }

        public DelegateCommand ConfirmCompressCommand { get; set; }

        public DelegateCommand BatchCompressCommand { get; set; }
        #endregion

        public CompressDialogViewModel(IDialogService dialogService)
        {
            LargeQualityCommand = new DelegateCommand(LargeQuality);
            StandardQualityCommand = new DelegateCommand(StandardQuality);
            LittleQualityCommand = new DelegateCommand(LittleQuality);
            MicroQualityCommand = new DelegateCommand(MicroQuality);
            CompressCommand = new DelegateCommand(Compress);
            ConfirmCompressCommand = new DelegateCommand(ConfirmCompress);
            BatchCompressCommand = new DelegateCommand(BatchCompress);

            dialogs = dialogService;
        }

        #region 逻辑函数
        private void LargeQuality()
        {
            compressDialogModel.CompressQuality = CompressDialogModel.EnumQualityLevel.StatusLarge;
            
        }
        private void StandardQuality()
        {
            compressDialogModel.CompressQuality = CompressDialogModel.EnumQualityLevel.StatusStandard;
            
        }
        private void LittleQuality()
        {
            compressDialogModel.CompressQuality = CompressDialogModel.EnumQualityLevel.StatusLittle;
            
        }
        private void MicroQuality()
        {
            compressDialogModel.CompressQuality = CompressDialogModel.EnumQualityLevel.StatusMicro;
            
        }

        private void ConfirmCompress()
        {
            RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
        }

        private void BatchCompress() {

            DialogParameters compresspdf = new DialogParameters();
            compresspdf.Add(ParameterNames.BatchProcessing_Name, "1");
            HomePageBatchProcessingDialogModel.FilePaths =new List<string> { pdfviewer.Document.FilePath.ToString() } ;
            HomePageBatchProcessingDialogModel.BatchProcessingIndex = 1;
            compresspdf.Add(ParameterNames.FilePath, new string[] { pdfviewer.Document.FilePath.ToString() });
            dialogs.ShowDialog(DialogNames.HomePageBatchProcessingDialog, compresspdf, e => { });
        }

        private int GetIndex(int pageindex)
        {
            Trace.WriteLine(pageindex);
            return 0;
        }
        private void Compress()
        {

            FolderBrowserDialog dlg = new FolderBrowserDialog();
            string saveSelectedPath = "";
            if (dlg.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                saveSelectedPath = dlg.SelectedPath.Trim();
                saveSelectedPath = saveSelectedPath + "\\"+document.FileName+"_Compress.pdf";
                saveSelectedPath = CommonHelper.CreateFilePath(saveSelectedPath);
            /*
             * 做一些工作
             */

            Trace.WriteLine("compressDialogModel.CompressQuality:  " + compressDialogModel.CompressQuality);
                var dialogresult = new DialogResult(ButtonResult.OK);
                dialogresult.Parameters.Add(ParameterNames.PDFDocument, document);
                dialogresult.Parameters.Add(ParameterNames.PassWord, pdfviewer.Tag);
                dialogresult.Parameters.Add(ParameterNames.FilePath, saveSelectedPath);
                dialogresult.Parameters.Add("compressDialogModel.CompressQuality", (int)compressDialogModel.CompressQuality);
                RequestClose.Invoke(dialogresult);
                //DialogParameters value = new DialogParameters();
                //value.Add(ParameterNames.PDFDocument, document);
                //value.Add(ParameterNames.PassWord, pdfviewer.Tag);
                //value.Add(ParameterNames.FilePath, saveSelectedPath);
                //value.Add("compressDialogModel.CompressQuality", (int)compressDialogModel.CompressQuality);
                //RequestClose?.Invoke(new DialogResult(ButtonResult.OK));
                //dialogs.ShowDialog(DialogNames.CompressProgressBarDialog, value, e =>
                //{

                //});
            }
            else { return; }
        }
            
        
        #endregion

        #region 框架行为
        public string Title => "";

        public event Action<IDialogResult> RequestClose;

        public bool CanCloseDialog()
        {
            return true;
        }

        public void OnDialogClosed()
        {
        }

        public void OnDialogOpened(IDialogParameters parameters)
        {
            parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out pdfviewer);
            if (pdfviewer != null)
            {
                CompressDialogModel compressdialogmodel = new CompressDialogModel();
                document = pdfviewer.Document;
                compressDialogModel = compressdialogmodel;
                compressDialogModel.CompressQuality = CompressDialogModel.EnumQualityLevel.StatusDefault;
            }
        }
        #endregion
    }
}