using System;
using System.Diagnostics;
using System.Text;
using Base;

namespace AppSys.Handlers{
    internal class HandlerProcesses : IHandler{
        public bool Matches(Command cmd){
            return cmd.Text.StartsWith("kill ", StringComparison.InvariantCultureIgnoreCase);
        }

        public string Handle(Command cmd){
            string[] processNames = cmd.Text.Substring("kill ".Length).Split(',', ';');
            int succeeded = 0, failed = 0;

            foreach(string processName in processNames){
                try{
                    Process[] processes = Process.GetProcessesByName(processName.EndsWith(".exe", StringComparison.InvariantCultureIgnoreCase) ? processName.Substring(0, processName.Length-4) : processName);

                    foreach(Process process in processes){
                        try{
                            process.Kill();
                            ++succeeded;
                        }catch{
                            ++failed;
                        }

                        process.Close();
                    }
                }catch{
                    ++failed;
                }
            }

            if (succeeded == 0 && failed == 0 && (cmd.Text.Equals("kill me", StringComparison.InvariantCultureIgnoreCase) || cmd.Text.StartsWith("kill me ", StringComparison.InvariantCultureIgnoreCase) || cmd.Text.StartsWith("kill me,", StringComparison.InvariantCultureIgnoreCase))){
                return "No.";
            }

            StringBuilder build = new StringBuilder();
            build.Append("Killed ").Append(succeeded).Append(" process").Append(succeeded == 1 ? "" : "es");

            if (failed > 0){
                build.Append(", failed ").Append(failed);
            }

            return build.Append('.').ToString();
        }
    }
}