using System;
using Server;
using Server.Mobiles;
using Server.Gumps;
using Server.Network;

namespace Server.Items
{
    public class StatCapScroll : SpecialScroll
    {
        public override int Message { get { return 1049469; } } /* Using a scroll increases the maximum amount of a specific skill or your maximum statistics.
																* When used, the effect is not immediately seen without a gain of points with that skill or statistics.
																* You can view your maximum skill values in your skills window.
																* You can view your maximum statistic value in your statistics window. */
        public override int Title
        {
            get
            {
                int level = ((int)Value - 230) / 5;

                if (level >= 0 && level <= 4 && Value % 5 == 0)
                    return 1049458 + level;	/* Wonderous Scroll (+5 Maximum Stats): OR
											* Exalted Scroll (+10 Maximum Stats): OR
											* Mythical Scroll (+15 Maximum Stats): OR
											* Legendary Scroll (+20 Maximum Stats): OR
											* Ultimate Scroll (+25 Maximum Stats): */

                return 0;
            }
        }

        public override string DefaultTitle { get { return String.Format("<basefont color=#FFFFFF>Power Scroll ({0}{1} Maximum Stats):</basefont>", ((int)Value - 225) >= 0 ? "+" : "", (int)Value - 225); } }

        public StatCapScroll()
            : this(105)
        {
        }

        [Constructable]
        public StatCapScroll(int value)
            : base(SkillName.Alchemy, value)
        {
            Hue = 0x481;
        }

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

        public override void AddNameProperty(ObjectPropertyList list)
        {
            int level = ((int)Value - 230) / 5;

            if (level >= 0 && level <= 4 && (int)Value % 5 == 0)
                list.Add(1049463 + level, "#1049476");	/* a wonderous scroll of ~1_type~ (+5 Maximum Stats) OR
															* an exalted scroll of ~1_type~ (+10 Maximum Stats) OR
															* a mythical scroll of ~1_type~ (+15 Maximum Stats) OR
															* a legendary scroll of ~1_type~ (+20 Maximum Stats) OR
															* an ultimate scroll of ~1_type~ (+25 Maximum Stats) */
            else
                list.Add("a scroll of power ({0}{1} Maximum Stats)", (Value - 225) >= 0 ? "+" : "", Value - 225);
        }

        public override void OnSingleClick(Mobile from)
        {
            int level = ((int)Value - 230) / 5;

            if (level >= 0 && level <= 4 && (int)Value % 5 == 0)
                base.LabelTo(from, 1049463 + level, "#1049476");
            else
                base.LabelTo(from, "a scroll of power ({0}{1} Maximum Stats)", (Value - 225) >= 0 ? "+" : "", Value - 225);
        }

        public override bool CanUse(Mobile from)
        {
            if (!base.CanUse(from))
                return false;

            int newValue = (int)Value;

            if (from is PlayerMobile && ((PlayerMobile)from).HasStatReward)
                newValue += 5;

            if (from.StatCap >= newValue)
            {
                from.SendLocalizedMessage(1049510); // Your stats are too high for this power scroll.
                return false;
            }

            return true;
        }

        public override void Use(Mobile from)
        {
            if (!CanUse(from))
                return;

            from.SendLocalizedMessage(1049512); // You feel a surge of magic as the scroll enhances your powers!

            if (from is PlayerMobile && ((PlayerMobile)from).HasStatReward)
                from.StatCap = (int)Value + 5;
            else
                from.StatCap = (int)Value;

            Effects.SendLocationParticles(EffectItem.Create(from.Location, from.Map, EffectItem.DefaultDuration), 0, 0, 0, 0, 0, 5060, 0);
            Effects.PlaySound(from.Location, from.Map, 0x243);

            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 4, from.Y - 6, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);
            Effects.SendMovingParticles(new Entity(Serial.Zero, new Point3D(from.X - 6, from.Y - 4, from.Z + 15), from.Map), from, 0x36D4, 7, 0, false, true, 0x497, 0, 9502, 1, 0, (EffectLayer)255, 0x100);

            Effects.SendTargetParticles(from, 0x375A, 35, 90, 0x00, 0x00, 9502, (EffectLayer)255, 0x100);

            Delete();
        }

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

            writer.Write((int)0); // version
        }

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

            int version = (InheritsItem ? 0 : reader.ReadInt()); //Required for SpecialScroll insertion

            LootType = LootType.Cursed;
            Insured = false;
        }
    }
}