namespace PkmnLib.Dynamic.Models;

/// <summary>
/// The result of a battle.
/// </summary>
public record struct BattleResult
{
    private BattleResult(bool conclusiveResult, byte? winningSide)
    {
        ConclusiveResult = conclusiveResult;
        WinningSide = winningSide;
    }
    
    /// <summary>
    /// An inconclusive battle result. This means no side has won.
    /// </summary>
    public static BattleResult Inconclusive => new(false, null);
    
    /// <summary>
    /// A conclusive battle result. This means one side has won.
    /// </summary>
    public static BattleResult Conclusive(byte winningSide) => new(true, winningSide);
    
    /// <summary>
    /// Whether the battle has a conclusive result. If false, no side has won.
    /// </summary>
    public bool ConclusiveResult { get; }
    
    /// <summary>
    /// The side that won the battle. If null, no side has won.
    /// </summary>
    public byte? WinningSide { get; }
}