using System;
using System.Collections.Generic;
using System.Net;
using System.Threading.Tasks;
using System.Windows;
using System.Web;
using System.Linq;
using MediaBrowser.Installer.Code;
using ServiceStack.Text;
using ServiceStack.Text.Json;
namespace MediaBrowser.Installer
{
    /// 
    /// Interaction logic for MainWindow.xaml
    /// 
    public partial class MainWindow : Window
    {
        protected PackageVersionClass PackageClass;
        protected Version PackageVersion;
        protected string PackageName = "MBServer";
        public MainWindow()
        {
            GetArgs();
            InitializeComponent();
            StartInstall();
        }
        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }
        protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
        {
            if (MessageBox.Show("Cancel Installation - Are you sure?", "Cancel", MessageBoxButton.YesNo) == MessageBoxResult.No)
            {
                e.Cancel = true;
            }
            base.OnClosing(e);
        }
        protected void GetArgs()
        {
            var args = AppDomain.CurrentDomain.SetupInformation.ActivationArguments;
            if (args == null || args.ActivationData == null || args.ActivationData.Length <= 0) return;
            var url = new Uri(args.ActivationData[0], UriKind.Absolute);
            var parameters = HttpUtility.ParseQueryString(url.Query);
            // fill in our arguments if there
            PackageName = parameters["package"] ?? "MBServer";
            PackageClass = (PackageVersionClass)Enum.Parse(typeof(PackageVersionClass), parameters["class"] ?? "Release");
            PackageVersion = new Version(parameters["version"].ValueOrDefault("0.0.0.1"));
        }
        protected async Task StartInstall()
        {
            lblStatus.Content = "Downloading Server Package...";
            dlAnimation.StartAnimation();
            prgProgress.Value = 0;
            prgProgress.Visibility = Visibility.Visible;
            var archive = await DownloadPackage();
        }
        protected async Task DownloadPackage()
        {
            using (var client = new WebClient())
            {
                try
                {
                    // get the package information for the server
                    var json = await client.DownloadStringTaskAsync("http://www.mb3admin.com/admin/service/package/retrieveAll?name="+PackageName);
                    var packages = JsonSerializer.DeserializeFromString>(json);
                    var version = packages[0].versions.Where(v => v.classification == PackageClass).OrderByDescending(v => v.version).FirstOrDefault();
                }
                catch (Exception e)
                {
                    MessageBox.Show(e.Message);
                }
            }
        return "";
        }
    }
}