using AyCode.Services.Nav.Ekaer.Models;
using TradeReasonType = AyCode.Services.Nav.Ekaer.Models.Common.TradeReasonType;
namespace FruitBank.Common.Services.Ekaer;
///
/// Irány-független, normalizált szállítmány-modell. A bejövő (ShippingDocument-csoport) és a kimenő
/// (OrderDto) forrás EBBE képződik (a adapterei), és innen épül MIND a
/// NAV tradeCard (), MIND a bejelentés-kötelezettség
/// (). Így az irányfüggő tudás a két adapterre szorul, a közös logika egy helyen van.
/// Szerver-oldali köztes típus — NEM megy a SignalR-dróton.
///
///
/// A fel-/lerakodási hely és a jármű már a NAV-típus (, ),
/// mert a saját telephely (company.Site) kész LocationType (Phone/Email/FELIR-mezőkkel) — azt átalakítás nélkül,
/// MEZŐVESZTÉS nélkül kell átengedni. A normalizálás (kötelezettséghez számít) a feladó/címzett országkódjára és a
/// tételek tömeg/érték-aggregálására korlátozódik.
///
public sealed class EkaerConsignment
{
/// A forrás azonosítója (bejövőnél ShippingDocument.Id, kimenőnél Order.Id). Csoport-kiértékelésnél
/// (több dokumentum) az első forrásé — a kötelezettség-döntés nem használja.
public int ForeignKey { get; init; }
public bool IsOutgoing { get; init; }
/// Számla-pénznem (ISO 4217). A tétel már KISZÁMOLT HUF-ban.
public string? Currency { get; init; }
/// Feladó / eladó (a kötelezettség az országkódját nézi).
public EkaerEndpoint Seller { get; init; } = new();
/// Címzett / vevő (a kötelezettség az országkódját nézi).
public EkaerEndpoint Buyer { get; init; } = new();
/// Felrakodási hely (NAV LocationType — pl. a saját telephely átengedve).
public LocationType? LoadLocation { get; init; }
/// Lerakodási hely (NAV LocationType — pl. a saját telephely átengedve).
public LocationType? UnloadLocation { get; init; }
public IReadOnlyList Lines { get; init; } = [];
public BasicVehicleDetailType? Vehicle { get; init; }
public BasicVehicleDetailType? Trailer { get; init; }
public string? CarrierName { get; init; }
}
/// Egy fél (feladó/címzett) normalizálatlan adatai a NAV seller/destination mezőkhöz ÉS a kötelezettség
/// országkód-vizsgálatához. (A cím egysoros; a tagolt fel-/lerakodási helyet a
/// / hordozza.)
public sealed class EkaerEndpoint
{
public string? Name { get; init; }
public string? VatNumber { get; init; }
public string? CountryCode { get; init; }
public string? FullAddress { get; init; }
}
/// Egy normalizált tétel. A és a már KISZÁMOLT (HUF-ban),
/// hogy a küszöb-summa és a tradeCard ugyanazt használja (egyetlen érték-forrás).
public sealed class EkaerLine
{
public string ExternalId { get; init; } = string.Empty;
public string? Vtsz { get; init; }
public string? Name { get; init; }
public double WeightKg { get; init; }
public long? ValueHuf { get; init; }
public TradeReasonType TradeReason { get; init; }
}