using PkmnLib.Dynamic.Models;

namespace PkmnLib.Dynamic.ScriptHandling;

// These interfaces are used for the AI to determine contextual information about the battle.

/// <summary>
/// Script for getting the number of turns left on a script by the AI.
/// </summary>
public interface IAIInfoScriptNumberTurnsLeft
{
    /// <summary>
    /// This function returns the number of turns left on the script. This is used for scripts that have a
    /// limited number of turns, such as Sleep or Confusion.
    /// </summary>
    int TurnsLeft();
}

/// <summary>
/// Script for getting the expected end of turn damage by the AI.
/// </summary>
public interface IAIInfoScriptExpectedEndOfTurnDamage
{
    /// <summary>
    /// This function returns the expected end of turn damage for the script. This is used for scripts that
    /// have an end of turn effect, such as Poison or Burn.
    /// </summary>
    void ExpectedEndOfTurnDamage(IPokemon pokemon, ref int damage);
}

/// <summary>
/// Script for getting the expected entry damage by the AI.
/// </summary>
public interface IAIInfoScriptExpectedEntryDamage
{
    /// <summary>
    /// This function returns the expected entry damage for the script. This is used for scripts that have
    /// an entry hazard effect, such as Spikes or Stealth Rock.
    /// </summary>
    void ExpectedEntryDamage(IPokemon pokemon, ref uint damage);
}