using Server.Items;

namespace Server.Mobiles
{
    public abstract class BaseGuard : Mobile
    {
        public BaseGuard(Mobile target)
        {
            if (target != null)
            {
                Location = target.Location;
                Map = target.Map;

                Effects.SendLocationParticles(
                    EffectItem.Create(Location, Map, EffectItem.DefaultDuration),
                    0x3728,
                    10,
                    10,
                    5023
                );
            }
        }

        public BaseGuard(Serial serial) : base(serial)
        {
        }

        public abstract Mobile Focus { get; set; }

        public static void Spawn(Mobile caller, Mobile target, int amount = 1, bool onlyAdditional = false)
        {
            if (target?.Deleted != false)
            {
                return;
            }

            foreach (var m in target.GetMobilesInRange(15))
            {
                if (m is BaseGuard g)
                {
                    if (g.Focus == null) // idling
                    {
                        g.Focus = target;

                        --amount;
                    }
                    else if (g.Focus == target && !onlyAdditional)
                    {
                        --amount;
                    }
                }
            }

            while (amount-- > 0)
            {
                caller.Region.MakeGuard(target);
            }
        }

        public override bool OnBeforeDeath()
        {
            Effects.SendLocationParticles(
                EffectItem.Create(Location, Map, EffectItem.DefaultDuration),
                0x3728,
                10,
                10,
                2023
            );

            PlaySound(0x1FE);

            Delete();

            return false;
        }

        public override void Serialize(IGenericWriter writer)
        {
            base.Serialize(writer);

            writer.Write(0); // version
        }

        public override void Deserialize(IGenericReader reader)
        {
            base.Deserialize(reader);

            var version = reader.ReadInt();
        }
    }
}
