using Data.SeaHavenIndustries; namespace SeaHaven.DataServices.Interfaces { public interface IUpliftDataService { Task<(int TotalCount, IReadOnlyList Items)> GetPagedAsync( string? status, int? tier, int page, int pageSize, CancellationToken cancellationToken); Task GetPendingExposureAsync(CancellationToken cancellationToken); Task> GetForDispatchAsync(int dispatchId, CancellationToken cancellationToken); Task> GetForWorkOrderAsync(int workOrderId, CancellationToken cancellationToken); Task GetByIdAndWorkOrderAsync(int requestId, int workOrderId, CancellationToken cancellationToken); Task> GetForVendorDispatchAsync(int dispatchId, CancellationToken cancellationToken); Task GetByIdAsync(int id, CancellationToken cancellationToken); Task GetWorkOrderIdForUpliftAsync(int upliftRequestId, CancellationToken cancellationToken); Task GetByIdAndDispatchAsync(int requestId, int dispatchId, CancellationToken cancellationToken); // SH-101: server-side join of an uplift request with its linked evidence document. // Returns null when the request, the linked evidence, or the dispatch linkage is absent. Task GetEvidenceForInternalDownloadAsync(int upliftRequestId, CancellationToken cancellationToken); Task HasPendingAsync(int dispatchId, CancellationToken cancellationToken); Task HasPendingForWorkOrderAsync(int workOrderId, CancellationToken cancellationToken); Task SumAutoApprovedAmountForWorkOrderAsync(int workOrderId, CancellationToken cancellationToken); // Approval queue read contract: set-based per-work-order exposure totals covering // auto-approved and admin-approved uplift amounts (pending, rejected, // cancelled/withdrawn, and revoked requests are excluded). Work orders absent // from the result have no approved exposure. Task> GetApprovedExposureForWorkOrdersAsync( IReadOnlyCollection workOrderIds, CancellationToken cancellationToken); Task> GetPendingForWorkOrderAsync(int workOrderId, CancellationToken cancellationToken); // SH-101: active = Pending or ChangesRequested (the only states that block a new request). Task HasActiveAsync(int dispatchId, CancellationToken cancellationToken); Task GetActiveRequestAsync(int dispatchId, CancellationToken cancellationToken); Task GetByRequestKeyAsync(int dispatchId, string requestKey, CancellationToken cancellationToken); Task> GetDueForExpiryAsync(DateTime utcNow, int count, CancellationToken cancellationToken); Task> GetDueForInitialNotificationAsync(int count, CancellationToken cancellationToken); Task> GetDueForEscalationAsync(int count, CancellationToken cancellationToken); Task StageAsync(DispatchUpliftRequest request, CancellationToken cancellationToken); Task SaveChangesAsync(CancellationToken cancellationToken); Task ExecuteWorkOrderMutationAsync( int workOrderId, Func> work, CancellationToken cancellationToken); } }