using System.ComponentModel.DataAnnotations;
using AyCode.Services.Nav.Ekaer.Models;

namespace AyCode.Services.Nav.Ekaer;

/// <summary>
/// Egy EKÁER beküldési kísérlet eredménye: vagy validációs hibák (ekkor NEM ment ki kérés a NAV-nak),
/// vagy a NAV-válasz (sikeres beküldés).
/// </summary>
public sealed class EkaerSubmitResult
{
    private EkaerSubmitResult(bool isValid, IReadOnlyList<ValidationResult> validationErrors, ManageTradeCardsResponse? response)
    {
        IsValid = isValid;
        ValidationErrors = validationErrors;
        Response = response;
    }

    /// <summary>Igaz, ha a validáció hibátlan volt (és így a beküldés megtörtént).</summary>
    public bool IsValid { get; }

    /// <summary>A validációs hibák (üres, ha érvényes volt). Ha nem üres, a bejelentés NEM lett elküldve.</summary>
    public IReadOnlyList<ValidationResult> ValidationErrors { get; }

    /// <summary>A NAV-válasz, ha a beküldés megtörtént; egyébként <c>null</c>.</summary>
    public ManageTradeCardsResponse? Response { get; }

    /// <summary>Validációs hibák miatt elutasított beküldés (nem ment ki kérés a NAV-nak).</summary>
    public static EkaerSubmitResult Invalid(IReadOnlyList<ValidationResult> validationErrors) => new(false, validationErrors, null);

    /// <summary>Sikeresen elküldött beküldés, a NAV-válasszal.</summary>
    public static EkaerSubmitResult Sent(ManageTradeCardsResponse response) => new(true, [], response);
}
