namespace Mbproxy.Bcd;

/// <summary>Discriminates the class of validation failure in a resolved BCD tag list.</summary>
public enum BcdValidationError
{
    /// <summary>Two or more entries share the same Modbus register address.</summary>
    DuplicateAddress,

    /// <summary>
    /// A 32-bit entry's high register (Address+1) collides with another entry's address.
    /// </summary>
    OverlappingHighRegister,

    /// <summary>An entry has a Width that is not 16 or 32.</summary>
    InvalidWidth,
}

/// <summary>A hard validation failure that prevents the map from being used.</summary>
public sealed record BcdError(BcdValidationError Kind, string Message, ushort? Address);

/// <summary>A non-fatal advisory that rides along with the map.</summary>
public sealed record BcdWarning(string Message, ushort? Address);

/// <summary>
/// Result of a <see cref="BcdTagMapBuilder.Build"/> call.
/// When <see cref="Errors"/> is non-empty the map is partial (only valid entries are included).
/// Callers should treat any error as a fatal configuration problem at startup.
/// </summary>
public sealed record ValidationResult(
    BcdTagMap Map,
    IReadOnlyList<BcdError> Errors,
    IReadOnlyList<BcdWarning> Warnings);
