using System;
using Server.Items;

namespace Server.Spells.Ninjitsu
{
    public class FocusAttack : NinjaMove
    {
        public FocusAttack()
        {
        }

        public override int BaseMana
        {
            get
            {
                return Core.ML ? 10 : 20;
            }
        }
        public override double RequiredSkill
        {
            get
            {
                return Core.ML ? 30.0 : 60 ;
            }
        }
        public override TextDefinition AbilityMessage
        {
            get
            {
                return new TextDefinition(1063095);
            }
        }// You prepare to focus all of your abilities into your next strike.
        public override bool Validate(Mobile from)
        {
            if (from.FindItemOnLayer(Layer.TwoHanded) as BaseShield != null)
            {
                from.SendLocalizedMessage(1063096); // You cannot use this ability while holding a shield.
                return false;
            }

            Item handOne = from.FindItemOnLayer(Layer.OneHanded) as BaseWeapon;

            if (handOne != null && !(handOne is BaseRanged))
                return base.Validate(from);

            Item handTwo = from.FindItemOnLayer(Layer.TwoHanded) as BaseWeapon;

            if (handTwo != null && !(handTwo is BaseRanged))
                return base.Validate(from);

            from.SendLocalizedMessage(1063097); // You must be wielding a melee weapon without a shield to use this ability.
            return false;
        }

        public override double GetDamageScalar(Mobile attacker, Mobile defender)
        {
            double ninjitsu = attacker.Skills[SkillName.Ninjitsu].Value;

            return 1.0 + (ninjitsu * ninjitsu) / 43636;
        }

        public override double GetPropertyBonus(Mobile attacker)
        {
            double ninjitsu = attacker.Skills[SkillName.Ninjitsu].Value;

            double bonus = (ninjitsu * ninjitsu) / 43636;

            return 1.0 + (bonus * 3 + 0.01);
        }

        public override bool OnBeforeDamage(Mobile attacker, Mobile defender)
        {
            return this.Validate(attacker) && this.CheckMana(attacker, true);
        }

        public override void OnHit(Mobile attacker, Mobile defender, int damage)
        {
            ClearCurrentMove(attacker);

            attacker.SendLocalizedMessage(1063098); // You focus all of your abilities and strike with deadly force!
            attacker.PlaySound(0x510);

            this.CheckGain(attacker);
        }

        public override void OnUse(Mobile from)
        {
            BaseWeapon wep = from.Weapon as BaseWeapon;

            if (wep != null)
            {
                wep.FocusWeilder = from;
                wep.InvalidateProperties();
            }
        }

        public override void OnClearMove(Mobile from)
        {
            BaseWeapon wep = from.Weapon as BaseWeapon;

            if (wep != null && wep.FocusWeilder != null)
            {
                wep.FocusWeilder = null;
                wep.InvalidateProperties();
            }
        }
    }
}