using System;
using uMod.Common;
using System.Collections.Generic;

namespace uMod.Plugins
{
	[Info("Server Restarter", "klauz24", "1.0.1"), Description("Automatically restarts your server in a given time.")]
	internal class ServerRestarter : Plugin
	{
		private Timer _timer;

		private Configuration _config;

		[Config, Toml]
		private class Configuration
		{
			public List<string> RestartTimes = new List<string>()
			{
				"00:00",
				"12:00"
			};
			public int RestartDelay = 60;
		}

		[Locale, Toml]
		private class PluginLang : Localization
		{
			public string Message => "Server restart in {0} seconds, get in a safe location.";
		}

		[Localization]
		private interface Localization : ILocale
		{
			string Message { get; }
		}

		private void Loaded(Configuration config) => _config = config;

		private void OnServerInitialized(bool initial)
		{
			_timer = timer.Every(1f, () =>
			{
				var timeNow = DateTime.Now.ToString("t");
				foreach (var entry in _config.RestartTimes)
				{
					if (timeNow == entry)
					{
						foreach (var player in Players.Connected)
						{
							player.Message(string.Format(Locale<PluginLang>(player).Message, _config.RestartDelay));
						}
						timer.In(_config.RestartDelay, () => Server.Shutdown());
						_timer.Destroy();
						break;
					}
				}
			});
		}
	}
}