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

namespace AppSys.Handlers {
	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.";
			}

			var 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();
		}
	}
}