namespace PkmnLib.Plugin.Gen7.Scripts.Abilities;

/// <summary>
/// Berserk is an ability that raises the user's Special Attack by one stage when its HP drops below half due to damage.
/// This effect only activates if the HP drops below half as a result of damage, not from other effects.
///
/// <see href="https://bulbapedia.bulbagarden.net/wiki/Berserk_(Ability)">Bulbapedia - Berserk</see>
/// </summary>
[Script(ScriptCategory.Ability, "berserk")]
public class Berserk : Script, IScriptOnDamage
{
    /// <inheritdoc />
    public void OnDamage(IPokemon pokemon, DamageSource source, uint oldHealth, uint newHealth)
    {
        if (source is not DamageSource.MoveDamage)
            return;
        if (oldHealth > pokemon.MaxHealth / 2 || newHealth > pokemon.MaxHealth / 2)
            return;

        EventBatchId batchId = new();
        pokemon.BattleData?.Battle.EventHook.Invoke(new AbilityTriggerEvent(pokemon)
        {
            BatchId = batchId,
        });
        pokemon.ChangeStatBoost(Statistic.SpecialAttack, 1, true, false, batchId);
    }
}