using System;
using System.Collections.Generic;
using System.Threading;
using Exiled.API.Features;
using Exiled.API.Interfaces;
using Exiled.Events.EventArgs;
using PlayerRoles;

namespace DClassInfoDisplay
{
    public class DClassInfoDisplayPlugin : Plugin<Config>
    {
        public override string Name => "DClassInfoDisplay";
        public override string Author => "NOT_MR";
        public override Version Version => new Version(1, 0, 1);
        public override string Prefix => "dclassinfodisplay";

        public EventHandlers EventHandlers;

        public override void OnEnabled()
        {
            EventHandlers = new EventHandlers(this);
            Exiled.Events.Handlers.Player.ChangingRole += EventHandlers.OnChangingRole;
            Exiled.Events.Handlers.Player.Died += EventHandlers.OnDied;
            Exiled.Events.Handlers.Player.Left += EventHandlers.OnLeft;
            Exiled.Events.Handlers.Server.RestartingRound += EventHandlers.OnRestartingRound;
            base.OnEnabled();
        }

        public override void OnDisabled()
        {
            Exiled.Events.Handlers.Player.ChangingRole -= EventHandlers.OnChangingRole;
            Exiled.Events.Handlers.Player.Died -= EventHandlers.OnDied;
            Exiled.Events.Handlers.Player.Left -= EventHandlers.OnLeft;
            Exiled.Events.Handlers.Server.RestartingRound -= EventHandlers.OnRestartingRound;
            EventHandlers.StopAllTimers();
            EventHandlers = null;
            base.OnDisabled();
        }
    }

    public class EventHandlers
    {
        private readonly DClassInfoDisplayPlugin plugin;
        private readonly Dictionary<Player, Timer> playerTimers = new Dictionary<Player, Timer>();

        public EventHandlers(DClassInfoDisplayPlugin plugin) => this.plugin = plugin;

        public void OnChangingRole(ChangingRoleEventArgs ev)
        {
            if (ev.NewRole == RoleTypeId.ClassD)
            {
                StartInfoTimer(ev.Player);
            }
            else
            {
                StopInfoTimer(ev.Player);
            }
        }

        public void OnDied(DiedEventArgs ev) => StopInfoTimer(ev.Player);

        public void OnLeft(LeftEventArgs ev) => StopInfoTimer(ev.Player);

        public void OnRestartingRound() => StopAllTimers();

        private void StartInfoTimer(Player player)
        {
            StopInfoTimer(player);
            Timer timer = new Timer(_ => ShowInfo(player), null, TimeSpan.Zero, TimeSpan.FromSeconds(1));
            playerTimers[player] = timer;
        }

        private void StopInfoTimer(Player player)
        {
            if (playerTimers.TryGetValue(player, out Timer timer))
            {
                timer.Dispose();
                playerTimers.Remove(player);
            }
        }

        public void StopAllTimers()
        {
            foreach (var timer in playerTimers.Values)
            {
                timer.Dispose();
            }
            playerTimers.Clear();
        }

        private void ShowInfo(Player player)
        {
            if (player == null || !player.IsAlive || player.Role != RoleTypeId.ClassD)
            {
                StopInfoTimer(player);
                return;
            }

            string message = $"<size=20><align=left>\n" +
                             $"<color=#FFA500><b>Имя:</b></color> {player.Nickname}\n" +
                             $"<color=#FFA500><b>Роль:</b></color> {player.Role}\n" +
                             $"<color=#FFA500><b>Ваши враги:</b></color> Охрана, МТФ, SCP\n" +
                             $"<color=#FFA500><b>Местоположение:</b></color> {player.CurrentRoom?.Name ?? "Неизвестно"}</align></size>";

            player.ShowHint(message, 1);
        }
    }

    public class Config : IConfig
    {
        public bool IsEnabled { get; set; } = true;
        public bool Debug { get; set; } = false;
    }
}

C:\Users\Дом\DClassInfoDisplay\Class1.cs(49,36): error CS0246: Не удалось найти тип или имя пространства имен "Changing

RoleEventArgs" (возможно, отсутствует директива using или ссылка на сборку). [C:\Users\Дом\DClassInfoDisplay\DClassInfo

Display.csproj]

C:\Users\Дом\DClassInfoDisplay\Class1.cs(61,28): error CS0246: Не удалось найти тип или имя пространства имен "DiedEven

tArgs" (возможно, отсутствует директива using или ссылка на сборку). [C:\Users\Дом\DClassInfoDisplay\DClassInfoDisplay.

csproj]

C:\Users\Дом\DClassInfoDisplay\Class1.cs(63,28): error CS0246: Не удалось найти тип или имя пространства имен "LeftEven

tArgs" (возможно, отсутствует директива using или ссылка на сборку). [C:\Users\Дом\DClassInfoDisplay\DClassInfoDisplay.

csproj]

нет твоя задача исправить код хоть с 0 можешь код написать главное без ошибок