using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Squirrel;
namespace BodyshopPartner.Utils
{
    public static class SquirrelAwareHelper
    {
        private static NLog.Logger logger = NLog.LogManager.GetCurrentClassLogger();

        public static bool AddHttpExcetion()
        {
            logger.Debug("Attempting to add HTTP Exclusion for web-server");

            string args = string.Format(@"http add urlacl url={0} user={1}", "http://+:1337/", "Everyone");

            ProcessStartInfo psi = new ProcessStartInfo("netsh", args);
            psi.Verb = "runas";
            psi.CreateNoWindow = true;
            psi.WindowStyle = ProcessWindowStyle.Hidden;
            psi.UseShellExecute = true;
            try
            {
                Process.Start(psi).WaitForExit();
                logger.Debug("Attempting to add HTTP Exclusion for web-server");
                return true;
            }
            catch (Exception Ex)
            {
                logger.Error("Unable to register exception " + Ex.ToString());
                return false;
            }
         

            //  System.Diagnostics.Process process = new System.Diagnostics.Process();
            //  System.Diagnostics.ProcessStartInfo startInfo = new System.Diagnostics.ProcessStartInfo();
            //  startInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
            //  startInfo.FileName = "cmd.exe";
            //  startInfo.Arguments = "netsh http add urlacl url=http://+:1337/ user=\"Everyone\"";
            //  startInfo.Verb = "runas";
            //  process.StartInfo = startInfo;
            //return process.Start();
        }

        public static void InitializeSquirrelAware()
        {
            using (var mgr = new UpdateManager(Utils.UpdateHandler.UpdatePath))
            {
                // Note, in most of these scenarios, the app exits after this method
                // completes!
                SquirrelAwareApp.HandleEvents(
                  onInitialInstall: v =>
                  {
                      logger.Debug("Installing via Squirrel Aware Helper. ", v);
                      try
                      {

                          bool successful = AddHttpExcetion();

                          if (successful)
                          {
                              logger.Debug("Successfully added exception.");
                          }
                          else
                          {
                              logger.Fatal("Unable to set exception for http port");
                          }

                      }
                      catch (Exception Ex)
                      {
                          logger.Fatal("Unable to set exception for http port", Ex.ToString());
                      }

                      mgr.CreateShortcutForThisExe();
                  },
                  onAppUpdate: v => mgr.CreateShortcutForThisExe(),
                  onAppUninstall: v => mgr.RemoveShortcutForThisExe(),
                  onFirstRun: () => { logger.Info("We've run for the first time."); });
            }
        }
    }
}
