using GalaSoft.MvvmLight.Command;
using Install.Core;
using Install.Core.Common;
using System;
using System.Collections.Generic;
using System.ComponentModel;
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.Shapes;

namespace Install.View
{
    /// <summary>
    /// PgDownload.xaml 的交互逻辑
    /// </summary>
    public partial class WdDownload : Window
    {
        WdDownloadVm viewModel;

        public WdDownload()
        {
            InitializeComponent();

            viewModel = new WdDownloadVm();
        }

        public void Init() 
        {
            viewModel.Init();
            this.DataContext = viewModel;

            viewModel.DownloadNewestInstallZip();

        }
    }
    public class WdDownloadVm : INotifyPropertyChanged 
    {
        InstallWizard installWizard;
        
        public event PropertyChangedEventHandler PropertyChanged;

        public bool IsReady { get; private set; } = false;
        public string Msg { get; private set; }
        public InstallWizard InstallWizard => installWizard;

        public RelayCommand ExecCmd { get; set; }
        public RelayCommand CancelCmd { get; set; }

        public WdDownloadVm() 
        {
            ExecCmd = new RelayCommand(Exec);
            CancelCmd = new RelayCommand(Cancel);
        }



        public void Init()
        {
            installWizard = Application.Current.Properties[nameof(InstallWizard)] as InstallWizard;
            Msg = $"下载 {installWizard.NewestInstallZipVersionInfo.InstallZipUrl}";
            
        }
        public async void DownloadNewestInstallZip()
        {
            var ret = await installWizard.DownloadNewestInstallZip();
            Msg = installWizard.DownloadInfo_ErrMsg;
            if (ret == true)
            {

                //解压
                //获取当前 exe 目录

                Msg = "开始解压......";
                await Task.Factory.StartNew(() =>
                {
                    SeverZipExt.Uncompress(installWizard.NewestInstallZipPath + ".7z", installWizard.NewestInstallZipPath);
                });
                Msg = "解压完成!!!";
                IsReady = true;
            }
        }
        private void Cancel()
        {
            //关闭当前

            Application.Current.Shutdown();
        }

        private void Exec()
        {
            //关闭当前，进入新的安装包，运行
            string exePath = System.IO.Path.Combine(installWizard.NewestInstallZipPath, "install.exe");
            CMD.RunExe(exePath);
            Application.Current.Shutdown();
        }
    }
}
