using AyCode.Services.Nav.Ekaer;
using AyCode.Services.Nav.Ekaer.Models;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
using FruitBank.Common.Services.Ekaer;
namespace FruitBank.Common.Server.Services.Ekaer;
///
/// A FruitBank szerver-oldali EKÁER-fogyasztója: egy -et leképez EKÁER tradeCard-okra
/// (a mapperrel), majd beküldi (az általános submit-orchestrátorral). Ez a vékony, projekt-specifikus réteg;
/// az általános NAV/EKÁER logika (validátor, submit, manage) az AyCode.Services-ben él.
///
public interface IFruitBankEkaerService
{
///
/// Leképezi és beküldi a szállítmányt. Az eredmény vagy validációs hibák (nem ment ki kérés),
/// vagy a NAV-válasz — lásd .
///
Task SubmitShippingAsync(Shipping shipping, OperationType operation = OperationType.Create, CancellationToken cancellationToken = default);
///
/// Egy szállítólevél-CSOPORTBÓL (egy EKÁER-egység dokumentumai) legenerálja az EKÁER tradeCard XML-t és validálja — a (meglévő vagy új)
/// rekordot tölti: XmlDoc + Status
/// ( / ) + ErrorText.
/// NEM perzisztál és NEM hív NAV-ot — a mentés (upsert) a hívó SignalR endpoint dolga.
///
/// A deklarációhoz tartozó szállítólevél-CSOPORT (egy (Shipping, Partner, PartnerDepot) egység) a betöltött gráffal (Partner, Items+ProductDto, Shipping→járművek) — összevont tömeggel/értékkel EGY tradeCard.
/// A csoport meglévő rekordja (újrageneráláskor); null → új rekord készül.
EkaerHistory GenerateEkaerXmlDocument(IReadOnlyCollection documents, EkaerHistory? ekaerHistory = null);
///
/// Egy kimenő rendelésből () legenerálja az EKÁER tradeCard XML-t és validálja —
/// a (meglévő vagy új) rekordot tölti (IsOutgoing = true). Mi vagyunk az
/// ELADÓ, a vevő a CÍMZETT (belföldi értékesítés). NEM perzisztál és NEM hív NAV-ot — a mentés a hívó dolga.
///
EkaerHistory GenerateEkaerXmlDocument(OrderDto order, EkaerHistory? ekaerHistory = null);
///
/// Eldönti egy bejövő (Shipping, Partner) CSOPORT EKÁER-kötelezettségét: külföldi (a feladó és a címzett
/// országkódja eltér) → mindig kötelező; belföld → az AGGREGÁLT tömeg/érték a küszöbhöz; érvénytelen országkód →
/// . A küszöb-summa a csoport ÖSSZES dokumentumának tételeire megy.
///
EkaerObligationResult EvaluateObligation(IReadOnlyCollection documents);
/// Eldönti egy kimenő rendelés EKÁER-kötelezettségét (ugyanaz a logika, a rendelés tételeire).
EkaerObligationResult EvaluateObligation(OrderDto order);
/// Beállítja a deklaráció () összegző mezőit (DB-mentes): ShippingDate + Partner.
/// A csoporton belül invariánsak; a forrás-kinyerés (bejövő: doc.ShippingDate + Partner.Name; kimenő: order.DateOfReceipt +
/// Customer.Company) a hívóé. Fallback NINCS — null/üres marad, ha hiányzik.
void SetSummary(EkaerHistory history, DateTime? shippingDate, string? partner);
}