using System.ComponentModel.DataAnnotations;
namespace AyCode.Services.Nav.Ekaer;
/// Az EKÁER validációs üzenet súlyossága.
public enum EkaerSeverity
{
/// Nem blokkoló — a bejelentés beküldhető, de valamit pótolni kell (pl. a rendszám a felrakodásig).
Warning,
/// Blokkoló — a NAV elutasítaná; beküldés előtt javítandó.
Error,
}
///
/// Súlyossággal (warning/error) bővített validációs eredmény. A -ból származik,
/// így a meglévő fogyasztók (akik csak az ErrorMessage-et használják) változatlanul működnek; aki a
/// szintet is akarja, a -t / a GetSeverity() kiterjesztést használja.
///
public sealed class EkaerValidationMessage(EkaerSeverity severity, string message) : ValidationResult(message)
{
public EkaerSeverity Severity { get; } = severity;
}
/// Súlyosság-segédek a validációs eredmény-listához.
public static class EkaerValidationExtensions
{
/// A súlyosság; egy sima (nem ) eredmény konzervatívan .
public static EkaerSeverity GetSeverity(this ValidationResult result)
=> result is EkaerValidationMessage m ? m.Severity : EkaerSeverity.Error;
/// Van-e blokkoló (error) szintű üzenet — ennek alapján NEM küldhető a bejelentés.
public static bool HasErrors(this IEnumerable results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Error);
/// Van-e warning szintű üzenet (a beküldést nem blokkolja, de pótlandó).
public static bool HasWarnings(this IEnumerable results) => results.Any(r => r.GetSeverity() == EkaerSeverity.Warning);
}