using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Oxide.Core;
using Oxide.Core.Libraries.Covalence;
using UnityEngine;

namespace Oxide.Plugins
{
[Info("SpawnProtection", "Rob1733", "1.0.0")]
[Description("Provides temporary spawn protection to players.")]
public class SpawnProtection : CovalencePlugin
{
private HashSet<IPlayer> protectedPlayers = new HashSet<IPlayer>();

private async Task DisableDamage(BasePlayer player)
{
await Task.Delay(20000);
if (!player.IsConnected) return;
player.SetPlayerFlag(BasePlayer.PlayerFlags.Relaxed, false);
protectedPlayers.Remove(player.IPlayer);
player.ChatMessage("Your spawn protection has expired.");
}

private void OnPlayerSleepEnded(BasePlayer player)
{
protectedPlayers.Add(player.IPlayer);
player.SetPlayerFlag(BasePlayer.PlayerFlags.Relaxed, true);
player.ChatMessage("You are now protected from damage for 20 seconds after spawning.");
DisableDamage(player);
}

private object OnPlayerAttack(BasePlayer attacker, HitInfo hitInfo)
{
var victim = hitInfo.HitEntity as BasePlayer;
if (victim != null && protectedPlayers.Contains(victim.IPlayer))
{
attacker.ChatMessage("You cannot attack other players until their spawn protection expires.");
return true;
}
return null;
}

[Command("spawnprotect")]
private void SpawnProtectCommand(IPlayer player, string command, string[] args)
{
player.Message("This server has spawn protection enabled. Please wait 20 seconds after spawning before attacking other players.");
}
}
}