using PDF_Office.ViewModels;
using Prism.Regions;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using Prism.Events;
using PDF_Office.EventAggregators;
using PDF_Office.CustomControl;
using Prism.Ioc;
using PDF_Office.Helper;
using System.IO;
using ComPDFKit.PDFDocument;
using PDFSettings.Settings;
using PDF_Office.Properties;

namespace PDF_Office.Views
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        public IEventAggregator aggregator;

        public IRegionManager region;

        public MainWindow()
        {
            InitializeComponent();
        }

        /// <summary>
        /// 此类因为Dragablz控件的原因需要特殊处理
        /// </summary>
        /// <param name="eventAggregator"></param>

        public MainWindow(IEventAggregator eventAggregator, IContainerProvider container) :this()
        {
            aggregator = eventAggregator;
            eventAggregator?.GetEvent<DragablzWindowEvent>().Publish(new DragablzWindowEventArgs() { TabControl = TabablzControl, Type = DragablzWindowEventType.Opened });
        }

        private void BtnMiniSize_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.SystemCommands.MinimizeWindow(this);
        }

        private void BtnClose_Click(object sender, RoutedEventArgs e)
        {
            System.Windows.SystemCommands.CloseWindow(this);
        }

        private void BtnReStore_Click(object sender, RoutedEventArgs e)
        {
            if (this.WindowState == WindowState.Maximized)
                System.Windows.SystemCommands.RestoreWindow(this);
            else
                System.Windows.SystemCommands.MaximizeWindow(this);
        }

        private void Window_Activated(object sender, EventArgs e)
        {
            App.Current.MainWindow = this;
            aggregator?.GetEvent<DragablzWindowEvent>().Publish(new DragablzWindowEventArgs() { TabControl = TabablzControl, Type = DragablzWindowEventType.Activated });
        }

        private void Window_Closed(object sender, EventArgs e)
        {
            aggregator?.GetEvent<DragablzWindowEvent>().Publish(new DragablzWindowEventArgs() { TabControl = TabablzControl, Type = DragablzWindowEventType.Closed });
        }

        private bool isNewDocument = false;
        public void LoadPdfViewer(string[] filePaths)
        {
            var content = App.mainWindowViewModel.SelectedItem.DataContext as MainContentViewModel;
            if (filePaths.Count() == 1)
            {
                if (App.OpenedFileList.Contains(filePaths[0]))
                {
                    App.mainWindowViewModel.SelectItem(filePaths[0]);
                }
                else
                {
                    content.OpenFile(filePaths[0]);
                }
                ToolMethod.SetFileThumbImg(filePaths[0]);
            }
            else
            {
                var fileList = filePaths.ToList().Where(x => !App.OpenedFileList.Exists(y => y == x)).ToList();
                if (fileList.Count <= 0)
                    return;

                content.OpenFile(filePaths[0]);
                for (int i = 1; i < fileList.Count(); i++)
                {
                    if (!App.OpenedFileList.Contains(fileList[i]))
                    {
                        App.mainWindowViewModel.AddTabItem(fileList[i]);
                    }
                    ToolMethod.SetFileThumbImg(fileList[i]);
                }
            }

            Settings.Default.Save();
        }

    }
}
