using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using System.Diagnostics;

using NodeStarterTools.SolutionPaths;
using NodeStarterTools.BuildWorker;

namespace NodeStarterTools
{
    /// <summary>
    /// dev or build
    /// if (build) copy bundle to mvc
    /// </summary>
    class Program
    {
        static readonly Config Config = new Config();

        
        /// <summary>
        /// Запускает webpack dev server
        /// </summary>
        static void Debug(bool RunFromVSBuild)
        {
            //Запущен при старте либо при сборке
            if (!RunFromVSBuild)
            {
                Console.WriteLine("Run from debug VS");

                //Проверка, что webpack dev server уже запущен
                switch (Config.DebugDevMode)
                {
                    case EnumDevMode.NoCheckExists:
                        Console.WriteLine("EnumDevMode.NoCheckExists");

                        new DebugWorker(Config).Work();
                        break;

                    case EnumDevMode.IfExistsNoRun:
                        Console.WriteLine("EnumDevMode.NoCheckExists");

                        if (Process.GetProcesses().
                            Where(e => e.MainWindowTitle == "npm").
                            Count() == 0)
                            new DebugWorker(Config).Work();
                        break;

                    case EnumDevMode.IfExistsReload:
                        Console.WriteLine("EnumDevMode.IfExistsReload");

                        Process.GetProcesses().
                            Where(e => e.MainWindowTitle == "npm").
                            ToList().ForEach(e => e.CloseMainWindow());
                        new DebugWorker(Config).Work();
                        break;
                }


            }
            //запущена при сборке
            else
            {
                Console.WriteLine("Run from debug build");
            }
        }

        /// <summary>
        /// Запускает сборку бандла
        /// </summary>
        static void Release(bool RunFromVSBuild)
        {
            if (!RunFromVSBuild)
            {
                Console.WriteLine("Run from release VS");
                //Не требуется так как сработает событие окончания сборки
                //Release();
            }
            else
            {
                Console.WriteLine("Run from release build");
                new ReleaseWorker(Config).Work();
            }
        }


        static void Main(string[] args)
        {
            if (!Config.RunSPA)
                return;

            //true - запущен при сборке из VS
            bool RunFromVSBuild = args.Length != 0;

#if DEBUG
            Debug(RunFromVSBuild);
#else
            Release(RunFromVSBuild);         
#endif

        }
    }
}
