using ComPDFKitViewer;
using ComPDFKitViewer.PdfViewer;
using Microsoft.Win32;
using PDF_Master.Helper;
using PDF_Master.Model;
using Prism.Commands;
using Prism.Mvvm;
using Prism.Regions;
using Prism.Services.Dialogs;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;

namespace PDF_Master.ViewModels.Dialog.ChatGPTAIDialogs
{
    public class DocumentaryTranslationDialogViewModel : BindableBase, IDialogAware
    {

        public IRegionManager regionManager;

        public CPDFViewer PDFViewer;

        public ViewContentViewModel viewContentViewModel;

        private CPDFViewer pdfViewer = null;

        private string fromlanguage = "";

        private string tolanguage = "";

        private int fromlanguageIndex = 0;
        public int FromlanguageIndex
        {
            get { return fromlanguageIndex; }
            set
            {
                SetProperty(ref fromlanguageIndex, value);
                fromlanguage=ChatGTPAIHelper.UpdateLanguagebType(value);
            }
        }

        private int tolanguageIndex = 0;
        public int TolanguageIndex
        {
            get { return tolanguageIndex; }
            set
            {
                SetProperty(ref tolanguageIndex, value);
                tolanguage = ChatGTPAIHelper.UpdateLanguagebType(value+1);
            }
        }

        public static List<string> FromlanguageFamily { set; get; } = new List<string>();

        public string ViewerRegionName { get; set; }

        private void GetFromlanguageOrigin()
        {
            FromlanguageFamily.Clear();
            FromlanguageFamily = ChatGTPAIHelper.SetFromlanguageOrigin();
        }
        public List<string> TolanguageFamily { set; get; } = new List<string>();

        private void GetTolanguageOrigin()
        {
            TolanguageFamily.Clear();
            TolanguageFamily = ChatGTPAIHelper.SetTolanguageOrigin();
        }

        public DelegateCommand TranslateCommand { get; set; }
        public DelegateCommand CancelCommand { get; set; }
        public DocumentaryTranslationDialogViewModel(IRegionManager regionManager)
        {
            this.regionManager = regionManager;
            CancelCommand = new DelegateCommand(cancel);
            TranslateCommand = new DelegateCommand(translate);
            ViewerRegionName = Guid.NewGuid().ToString();
            init();
        }

        private void init()
        {
            GetFromlanguageOrigin();
            GetTolanguageOrigin();
        }
        private void cancel()
        {
            RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
        }
        public async void translate()
        {
           string newfile= await ChatGTPAIHelper.fileTranslate(pdfViewer.Document.FilePath, fromlanguage, tolanguage);
            if (!string.IsNullOrEmpty(newfile))
            {
                if (File.Exists(newfile))
                {
                    if (viewContentViewModel != null) {
                        viewContentViewModel.OpenFile(new string[] { newfile });
                    }
                }
            }
            RequestClose.Invoke(new DialogResult(ButtonResult.Cancel));
        }

        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);
            parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
            
            if (pdfViewer != null)
            {
                if (!regionManager.Regions[ViewerRegionName].Views.Contains(pdfViewer))
                {
                    PDFViewer = new CPDFViewer();
                    PDFViewer.InitDocument(pdfViewer.Document);
                    //Document = PDFViewer.Document;
                    //pdfViewer.CustomDrawHandler += CurrentViewer_CustomDrawHandler;
                    //pdfViewer.UndoManager.PropertyChanged += UndoManager_PropertyChanged;
                    regionManager.AddToRegion(ViewerRegionName, PDFViewer);
                    PDFViewer.SetAnnotInteraction(!PDFViewer.GetAnnotInteraction());
                    PDFViewer.Load();
                    PDFViewer.ChangeFitMode(FitMode.FitHeight);
                    PDFViewer.ChangeViewMode(ViewMode.Single);
                    PDFViewer.SetMouseMode(MouseModes.PanTool);
                    fromlanguage = ChatGTPAIHelper.UpdateLanguagebType(0);
                    tolanguage = ChatGTPAIHelper.UpdateLanguagebType(1);
                    //PageRangeNumber = PDFViewer.Document.PageCount;
                    //PDFViewer.Zoom(0.1);
                }
            }
        }
    }
}