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

namespace PkmnLib.Dynamic.Libraries;

/// <summary>
/// Miscellaneous handlings for battles.
/// </summary>
public interface IMiscLibrary
{
    /// <summary>
    /// Returns the choice that's used when a Pokemon is unable to make the move choice it wants to, or when it has no
    /// moves left, yet wants to make a move.
    /// </summary>
    ITurnChoice ReplacementChoice(IPokemon user, byte targetSide, byte targetPosition);

    /// <summary>
    /// Returns whether the given choice is the choice that is used when the user is unable to make a move choice.
    /// (usually struggle).
    /// </summary>
    bool IsReplacementChoice(ITurnChoice choice);

    /// <summary>
    /// Gets the current time of day for the battle.
    /// </summary>
    TimeOfDay GetTimeOfDay();

    /// <summary>
    /// Returns whether the given Pokemon can flee from the battle.
    /// </summary>
    bool CanFlee(IBattle battle, IFleeChoice fleeChoice);
}