using Characters;
using UnityEngine;
using System;
using System.Collections;
using Mirror;

namespace Debuffs
{
    public class DebuffBase
    {
        public event Action<DebuffBase, Pawn> OnDebuffStart;
        public event Action<DebuffBase, Pawn> OnDebuffEnd;

        protected float duration = 5f;

        public float Duration => duration;

        public virtual void Enable(Pawn pawn) { }
        public virtual void Disable(Pawn pawn) { }

        public virtual IEnumerator Act(Pawn pawn)
        {
            OnDebuffStart?.Invoke(this, pawn);

            yield return new WaitForSeconds(duration);

            OnDebuffEnd?.Invoke(this, pawn);
        }

        public DebuffBase() { }

        public DebuffBase(float duration)
        {
            this.duration = duration;
        }
    }

    public static class DebuffSerializer
    {
        public static void WriteDebuff(this NetworkWriter writer, DebuffBase value)
        {
            writer.WriteFloat(value.Duration);
        }

        public static DebuffBase ReadDebuff(this NetworkReader reader)
        {
            return new TaserDebuff(reader.ReadFloat());
        }
    }
}