using PkmnLib.Static.Moves;

namespace PkmnLib.Plugin.Gen7.Scripts.Utils;

public static class CopyableMoves
{
    /// <summary>
    /// Validates if a move can be copied by scripts, such as Assist.
    /// </summary>
    public static bool CanCopyMove(this IMoveData move) => !NonCopyable.Contains(move.Name);

    /// <summary>
    /// The names of moves that cannot be copied by scripts.
    /// </summary>
    private static readonly HashSet<StringKey> NonCopyable =
    [
        "assist",
        "baneful_bunker",
        "beak_blast",
        "belch",
        "bestow",
        "bounce",
        "celebrate",
        "chatter",
        "circle_throw",
        "copycat",
        "counter",
        "covet",
        "destiny_bond",
        "detect",
        "dig",
        "dive",
        "dragon_tail",
        "endure",
        "feint",
        "fly",
        "focus_punch",
        "follow_me",
        "helping_hand",
        "hold_hands",
        "kings_shield",
        "mat_block",
        "me_first",
        "metronome",
        "mimic",
        "mirror_coat",
        "mirror_move",
        "nature_power",
        "phantom_force",
        "protect",
        "rage_powder",
        "roar",
        "shadow_force",
        "shell_trap",
        "sketch",
        "sky_drop",
        "sleep_talk",
        "snatch",
        "spiky_shield",
        "spotlight",
        "struggle",
        "switcheroo",
        "thief",
        "transform",
        "trick",
        "whirlwind",
    ];
}