using System;
using Server.Mobiles;

namespace Server.Items
{
    public class HalloweenPumpkin : Item
    {
        private static readonly string[] m_Staff =
        {
            "Ryan", "Mark", "Eos", "Athena", "Xavier", "Krrios", "Zippy", "Dexter", "Argalep"
        };
        [Constructable]
        public HalloweenPumpkin()
            : base()
        {
            Weight = Utility.RandomMinMax(3, 20);
            ItemID = (Utility.RandomDouble() <= .02) ? Utility.RandomList(0x4694, 0x4698) : Utility.RandomList(0xc6a, 0xc6b, 0xc6c);
        }

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

        public override void OnDoubleClick(Mobile from)
        {
            if (!from.InRange(GetWorldLocation(), 2))
                return;

            bool douse = false;

            switch (ItemID)
            {
                case 0x4694: 
                    ItemID = 0x4691; 
                    break;
                case 0x4691: 
                    ItemID = 0x4694; 
                    douse = true; 
                    break;
                case 0x4698: 
                    ItemID = 0x4695; 
                    break;
                case 0x4695: 
                    ItemID = 0x4698; 
                    douse = true; 
                    break;
                default: 
                    return;
            }
            from.SendLocalizedMessage(douse ? 1113988 : 1113987); // You extinguish/light the Jack-O-Lantern
            Effects.PlaySound(GetWorldLocation(), Map, douse ? 0x3be : 0x47);
        }

        private void AssignRandomName()
        {
            Name = string.Format("{0}'s Jack-O-Lantern", m_Staff[Utility.Random(m_Staff.Length)]);
        }

        public override bool OnDragLift(Mobile from)
        {
            if (Name == null && (ItemID == 0x4694 || ItemID == 0x4691 || ItemID == 0x4698 || ItemID == 0x4695))
            {
                if (Utility.RandomBool())
                {
                    new PumpkinHead().MoveToWorld(GetWorldLocation(), Map);

                    Delete();
                    return false;
                }
                AssignRandomName();
            }
            return true;
        }

        public override void Serialize(GenericWriter writer)
        {
            base.Serialize(writer);
            writer.Write((int)1); // version
        }

        public override void Deserialize(GenericReader reader)
        {
            base.Deserialize(reader);
            int version = reader.ReadInt();

            if (version == 0 && Name == null && ItemID == 0x4698)
                AssignRandomName();
        }
    }
}
