using AyCode.Services.Nav;

namespace AyCode.Services.Nav.Ekaer.Models;

// Az EKÁER generált modellekre (XSD-ből, EKAER/1.0 namespace) ráhúzzuk a Nav base réteg interfészeit.
// Nem invazív: a generált fájlok érintetlenek maradnak (re-generálható), itt csak partial-bővítés.
// A legtöbb mező neve már egyezik az interfésszel → implicit teljesül; ahol eltér (TaxNumber↔VatNumber),
// ott explicit interfész-implementáció map-el.

/// <summary>requestId + timestamp — már megvannak a generált típusban, csak az interfész-deklaráció kell.</summary>
public partial class BasicHeaderType : INavRequestHeader
{
}

/// <summary>user / passwordHash / requestSignature neve egyezik; az adószám az EKÁER-ben <c>VATNumber</c>.</summary>
public partial class UserHeaderType : INavUserHeader
{
    string INavUserHeader.TaxNumber
    {
        get => VatNumber;
        set => VatNumber = value;
    }
}

/// <summary>A base-headerhez (Header) és auth-headerhez (User) ad interfész-nézetet.</summary>
public partial class BasicRequestType : INavRequest
{
    INavRequestHeader INavRequest.RequestHeader => Header;
    INavUserHeader INavRequest.UserHeader => User;
}

/// <summary>funcCode/reasonCode/msg → a sikeresség-szerződés.</summary>
public partial class BaseResultType : INavResult
{
    bool INavResult.IsSuccess => FuncCode == FunctionCodeType.Ok;
    string? INavResult.ReasonCode => ReasonCode.ToString();
    string? INavResult.Message => Msg;
}

/// <summary>A válasz top-level (header-szintű) result-jának interfész-nézete.</summary>
public partial class BasicResponseType : INavResponse
{
    INavResult INavResponse.Result => Result;
}
