namespace Acl.Application;
/// Port to the ZGW Zaken API. Implemented in Infrastructure — the only
/// code that talks to OpenZaak (ADR-0001).
public interface IZaakGateway
{
Task OpenZaakAsync(ZaakRequest request, CancellationToken ct = default);
///
/// Set the given zaak to the eindstatus (final statustype) of the supplied zaaktype —
/// the ZGW translation of "approve". The gateway resolves which statustype is the eindstatus from
/// the catalogus and POSTs a status against the zaak, dated .
///
Task SetZaakToEindstatusAsync(Uri zaakUrl, Uri zaaktypeUrl, DateOnly datumStatusGezet, CancellationToken ct = default);
///
/// Set the given zaak to the cancellation statustype ("Geannuleerd") and record the
/// matching cancellation resultaat ("Vervallen") — the ZGW translation of "the 30-day document term
/// lapsed" (S-10c). Distinct from (approval): the gateway
/// resolves both the cancellation statustype and resultaattype from the catalogus by their
/// omschrijving, POSTs the resultaat then the status, dated .
///
Task SetZaakToCancellationStatusAsync(Uri zaakUrl, Uri zaaktypeUrl, DateOnly datumStatusGezet, CancellationToken ct = default);
/// Read the zaak's identificatie — the public-safe reference the register shows.
/// The Event Subscriber calls this through the ACL rather than reading ZGW itself (§8.1, #78).
Task GetZaakIdentificatieAsync(Uri zaakUrl, CancellationToken ct = default);
///
/// Store a diploma document (S-10b): create an enkelvoudiginformatieobject in the ZGW
/// Documenten API and relate it to the zaak via a zaakinformatieobject. Returns the URL of
/// the created informatieobject.
///
Task StoreDocumentAsync(DocumentRequest request, CancellationToken ct = default);
/// Resolve the URL of the published zaaktype with the given
/// from the Catalogi API (S-27). Throws if no published zaaktype matches.
Task ResolveZaaktypeUrlAsync(string identificatie, CancellationToken ct = default);
/// Resolve the URL of the published informatieobjecttype with the given
/// from the Catalogi API (S-27). Throws if none matches.
Task ResolveInformatieobjecttypeUrlAsync(string omschrijving, CancellationToken ct = default);
}