using PkmnLib.Static.Libraries;

namespace PkmnLib.Plugin.Gen7.Scripts.Pokemon;

[Script(ScriptCategory.Pokemon, "foresight")]
public class ForesightEffect : Script, IScriptPreventStatBoostChange, IScriptChangeTypesForIncomingMove
{
    private readonly TypeIdentifier _normalType;
    private readonly TypeIdentifier _fightingType;
    private readonly TypeIdentifier _ghostType;

    public ForesightEffect(IReadOnlyTypeLibrary typeLibrary)
    {
        typeLibrary.TryGetTypeIdentifier("normal", out _normalType);
        typeLibrary.TryGetTypeIdentifier("fighting", out _fightingType);
        typeLibrary.TryGetTypeIdentifier("ghost", out _ghostType);
    }

    /// <inheritdoc />
    public void PreventStatBoostChange(IPokemon target, Statistic stat, sbyte amount, bool selfInflicted,
        ref bool prevent)
    {
        if (stat == Statistic.Evasion)
            prevent = true;
    }

    /// <inheritdoc />
    public void ChangeTypesForIncomingMove(IExecutingMove executingMove, IPokemon target, byte hitIndex,
        IList<TypeIdentifier> types)
    {
        if (executingMove.UseMove.MoveType == _normalType || executingMove.UseMove.MoveType == _fightingType)
        {
            types.RemoveAll(x => x == _ghostType);
        }
    }
}