using PkmnLib.Dynamic.Models;
using PkmnLib.Dynamic.Models.Choices;

namespace PkmnLib.Dynamic.ScriptHandling;

/// <summary>
/// A script category defines a sub-group of scripts. This can be used to have multiple scripts with
/// the same name, but a different script. It should be completely valid for a move to have the same
/// name as an ability, or more commonly: for a script attached to a Pokemon to have the same name as
/// a move that placed it there.
/// </summary>
public enum ScriptCategory
{
    /// <summary>
    /// A script that belongs to a move. This generally is only the script that is attached to a
    /// <see cref="IMoveChoice"/> and <see cref="IExecutingMove"/>
    /// </summary>
    Move = 0,

    /// <summary>
    /// A volatile script effect that is attached to a move choice.
    /// </summary>
    MoveVolatile = 1,

    /// <summary>
    /// An ability script. Scripts in this category are always abilities, and therefore always
    /// attached to a Pokemon.
    /// </summary>
    Ability = 2,

    /// <summary>
    /// A non volatile status script. Scripts in this category are always non volatile statuses, and
    /// therefore always attached to a Pokemon.
    /// </summary>
    Status = 3,

    /// <summary>
    /// A volatile status script. Scripts in this category are always volatile status effects, and
    /// therefore always attached to a Pokemon.
    /// </summary>
    Pokemon = 4,

    /// <summary>
    /// A script that can be attached to an entire side.
    /// </summary>
    Side = 5,

    /// <summary>
    /// A script that can be attached to the entire battle.
    /// </summary>
    Battle = 6,

    /// <summary>
    /// A special script for weather, for use on battles.
    /// </summary>
    Weather = 7,

    /// <summary>
    /// A special script for terrain, for use on battles.
    /// </summary>
    Terrain = 8,

    /// <summary>
    /// A special script for held items. As they're part of a held item, they're attached to a Pokemon.
    /// </summary>
    ItemBattleTrigger = 9,
}