using ComPDFKitViewer.PdfViewer;
using PDF_Office.CustomControl;
using PDF_Office.EventAggregators;
using PDF_Office.Model;
using Prism.Commands;
using Prism.Events;
using Prism.Mvvm;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows;

namespace PDF_Office.ViewModels.EditTools.Watermark
{
    public class WatermarkContentViewModel : BindableBase, INavigationAware
    {
        public IEventAggregator eventAggregator;
        public IRegionManager watermarkRegion;

        private CPDFViewer PDFViewer;

        private ViewContentViewModel viewContentViewModel;

        public string TemplateListName = "WatermarkTemplateListBaseContent";
        public string CreateName = "WatermarkCreateBaseContent";
        public string CreateModTextName = "WatermarkCreateTextContent";
        public string CreateModFileName = "WatermarkCreateFileContent";

        public string TemplateListModTextName = "WatermarkTemplateListTextContent";
        public string TemplateListModFileName = "WatermarkTemplateListFileContent";

        public string WatermarkDocumentName = "WatermarkDocumentContent";

        private string _watermarkSettingsRegionName;
        public string WatermarkSettingsRegionName
        {
            get { return _watermarkSettingsRegionName; }
            set { _watermarkSettingsRegionName = value; }
        }

        private Visibility _watermarkSettingsVisible = Visibility.Collapsed;
        public Visibility WatermarkSettingsVisible
        {
            get { return _watermarkSettingsVisible; }
            set { _watermarkSettingsVisible = value; }
        }

        private string _watermarkDocumentRegionName;
        /// <summary>
        /// 持有Document的Region,负责渲染和保存
        /// </summary>
        public string WatermarkDocumentRegionName
        {
            get { return _watermarkDocumentRegionName; }
            set { _watermarkDocumentRegionName = value; }
        }

        private Visibility _watermarkDocumentVisible = Visibility.Visible;
        /// <summary>
        /// 持有Document的Region可见
        /// </summary>
        public Visibility WatermarkDocumentVisible
        {
            get { return _watermarkDocumentVisible; }
            set { _watermarkDocumentVisible = value; }
        }

        private EnumTextOrFile _currentCreateMod;
        public EnumTextOrFile CurrentCreateMod
        {
            get { return _currentCreateMod; }
            set { _currentCreateMod = value; }
        }

        private EnumTextOrFile _currentTemplateListMod;
        public EnumTextOrFile CurrentTemplateListMod
        {
            get { return _currentTemplateListMod; }
            set { _currentTemplateListMod = value; }
        }

        public DelegateCommand CloseEditToolCommand { get; set; }

        public DelegateCommand DeleteWatermarkCommand { get; set; }

        public DelegateCommand ConfirmEditToolCommand { get; set; }

        public DelegateCommand<string> EnterSelectedContentCommand { get; set; }

        public WatermarkContentViewModel(IRegionManager regionManager, IEventAggregator eventAggregator)
        {
            this.eventAggregator = eventAggregator;
            this.watermarkRegion = regionManager;
            WatermarkSettingsVisible = Visibility.Visible;
            WatermarkSettingsRegionName = Guid.NewGuid().ToString();
            WatermarkDocumentRegionName = Guid.NewGuid().ToString();
            CloseEditToolCommand = new DelegateCommand(CloseEditTool);
            ConfirmEditToolCommand = new DelegateCommand(ConfirmEditTool);
            EnterSelectedContentCommand = new DelegateCommand<string>(EnterSelectedContent);
            DeleteWatermarkCommand = new DelegateCommand(DeleteWatermark);
            eventAggregator.GetEvent<EnterTemplateListOrCreateEvent>().Subscribe(EnterTemplateListOrCreate);
            eventAggregator.GetEvent<SetCurrentCreateModEvent>().Subscribe(SetCurrentCreateMod);
            eventAggregator.GetEvent<SetCurrentTemplateListModEvent>().Subscribe(SetCurrentTemplateListMod);

        }
        public void CloseEditTool()
        {
            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();

        }

        public void ConfirmEditTool()
        {
            this.eventAggregator.GetEvent<ConfirmEditToolsWatermarkEvent>().Publish();
        }

        public void EnterTemplateListOrCreate(EnumTemplateListOrCreate enumTemplateListOrCreate)
        {
            if (enumTemplateListOrCreate == EnumTemplateListOrCreate.StatusTemplate)
            {
                EnterSelectedContent(TemplateListName);
            }
            else
            {
                EnterSelectedContent(CreateName);
            }
        }

        public void SetCurrentCreateMod(string currentCreateModName)
        {
            if (currentCreateModName == CreateModTextName)
            {
                CurrentCreateMod = EnumTextOrFile.StatusText;
            }
            else if (currentCreateModName == CreateModFileName)
            {
                CurrentCreateMod = EnumTextOrFile.StatusFile;
            }
        }

        public void SetCurrentTemplateListMod(string currentTemplateListModName)
        {
            if (currentTemplateListModName == TemplateListModTextName)
            {
                CurrentTemplateListMod = EnumTextOrFile.StatusText;
            }
            else if (currentTemplateListModName == TemplateListModFileName)
            {
                CurrentTemplateListMod = EnumTextOrFile.StatusFile;
            }
        }

        public void EnterSelectedContent(string SelectedContentName)
        {
            NavigationParameters param = new NavigationParameters();
            param.Add(ParameterNames.PDFViewer, PDFViewer);
            if (SelectedContentName == TemplateListName)
            {
                param.Add("CurrentCreateModName", CurrentCreateMod);
            }
            else if (SelectedContentName == CreateName)
            {
                param.Add("CurrentTemplateListModName", CurrentTemplateListMod);
            }
            watermarkRegion.RequestNavigate(WatermarkSettingsRegionName, SelectedContentName, param);
            WatermarkSettingsVisible = Visibility.Visible;
        }

        public void EnterDocumentContent()
        {
            NavigationParameters param = new NavigationParameters();
            param.Add(ParameterNames.PDFViewer, PDFViewer);
            param.Add(ParameterNames.ViewContentViewModel, viewContentViewModel);
            watermarkRegion.RequestNavigate(WatermarkDocumentRegionName, WatermarkDocumentName, param);
            WatermarkDocumentVisible = Visibility.Visible;
        }

        private void DeleteWatermark() {

            AlertsMessage alertsMessage = new AlertsMessage();
            alertsMessage.ShowDialog("", "请输入有效范围", "OK");
            PDFViewer.Document.DeleteWatermarks();
            PDFViewer.UndoManager.CanSave = true;
            this.eventAggregator.GetEvent<CloseEditToolEvent>().Publish();
        }

        public void OnNavigatedTo(NavigationContext navigationContext)
        {
            navigationContext.Parameters.TryGetValue<ViewContentViewModel>(ParameterNames.ViewContentViewModel, out viewContentViewModel);
            navigationContext.Parameters.TryGetValue<CPDFViewer>(ParameterNames.PDFViewer, out PDFViewer);
            EnterSelectedContent(TemplateListName);
            EnterDocumentContent();

        }

        public bool IsNavigationTarget(NavigationContext navigationContext)
        {
            return true;
        }

        public void OnNavigatedFrom(NavigationContext navigationContext)
        {
        }
    }
}