using PkmnLib.Dynamic.Models;

namespace PkmnLib.Dynamic.Events;

/// <summary>
/// Event triggered when a Pokémon is switched in.
/// </summary>
public class SwitchEvent : IEventData
{
    /// <inheritdoc cref="SwitchEvent"/>
    public SwitchEvent(byte sideIndex, byte position, IPokemon? pokemon)
    {
        SideIndex = sideIndex;
        Position = position;
        Pokemon = pokemon;
    }

    /// <summary>
    /// The index of the side that the Pokémon is switching in on.
    /// </summary>
    public byte SideIndex { get; init; }

    /// <summary>
    /// The position that the Pokémon is switching in to.
    /// </summary>
    public byte Position { get; init; }

    /// <summary>
    /// The Pokémon that is switching in. If null, no Pokémon is switching in, and the slot is empty after the switch.
    /// </summary>
    public IPokemon? Pokemon { get; init; }

    /// <inheritdoc />
    public EventBatchId BatchId { get; init; }
}