using AyCode.Services.Nav.Ekaer;
using AyCode.Services.Nav.Ekaer.Models;
using FruitBank.Common.Dtos;
using FruitBank.Common.Entities;
namespace FruitBank.Common.Services.Ekaer;
///
/// FruitBank domain → NAV EKÁER tradeCard leképezés. Egy bejövő -ből
/// EKÁER tradeCard műveleteket állít elő (dokumentumonként egyet).
///
///
/// A NAV-protokollt és az authentikációt NEM kezeli — az az AyCode.Services.Nav réteg felelőssége.
/// A feladót (beszállító Partner) és a saját céget () egységesen,
/// -ként kezeli.
///
public interface IShippingToEkaerMapper
{
///
/// Leképezi a minden ShippingDocument-jét egy-egy EKÁER tradeCard műveletre.
///
/// A bejövő szállítmány (fuvarozó/jármű a Shipping szintjén, eladó/tételek a dokumentum szintjén).
/// A bejelentő saját cégadatai (címzett bejövő relációban) + a lerakodási hely.
/// A tradeCard művelet típusa. Alapértelmezés: .
IReadOnlyList MapShipping(Shipping shipping, EkaerCompanyInfo company, OperationType operation = OperationType.Create);
///
/// EGY szállítólevelet () képez le egy tradeCard-dá — a dokumentum-szintű
/// EKÁER-granularitás egysége (1 dokumentum = 1 tradeCard = 1 TCN). A jármű/fuvarozó adatok a
/// document.Shipping-ből jönnek; ha az nincs betöltve, ezek üresen maradnak (a validátor jelzi).
///
TradeCardType MapDocument(ShippingDocument document, EkaerCompanyInfo company);
///
/// EGY kimenő rendelést () képez le egy tradeCard-dá: a bejelentő
/// (mi) az ELADÓ, a vevő a CÍMZETT, az irány belföldi értékesítés (D/S). A vonó jármű forrása
/// a kimenő fuvar-adat (OrderDto) — amíg az nincs bekötve, üresen marad (a validátor jelzi).
///
TradeCardType MapOrder(OrderDto order, EkaerCompanyInfo company);
///
/// Bejövő forrás → normalizált . Egy vagy több -tel
/// hívható: EGY dokumentummal a tradeCard-generáláshoz, a (Shipping, Partner) CSOPORTtal a kötelezettség-summához
/// (a tételek összevonva). A hívó gondoskodik róla, hogy a csoport azonos partneré és azonos Shippingé legyen.
///
EkaerConsignment ToConsignment(IReadOnlyCollection documents, EkaerCompanyInfo company);
/// Kimenő forrás → normalizált (egy rendelés = egy szállítmány).
EkaerConsignment ToConsignment(OrderDto order, EkaerCompanyInfo company);
/// Normalizált szállítmány → NAV tradeCard. KÖZÖS a két irányra; a MapDocument/MapOrder ezt hívja.
TradeCardType BuildTradeCard(EkaerConsignment consignment);
}