import { RefundRequest, RefundResult } from '@platform-modules/billing';
export { RefundRequest, RefundResult } from '@platform-modules/billing';
import { A as Actor, O as OrdersSchema } from './schema-CjYEsh_M.js';
export { L as ReturnTransitionError, M as isReturnTransitionError } from './schema-CjYEsh_M.js';
import { TransactionalDatabase } from '@platform-modules/db';
import 'drizzle-orm/pg-core';

type ReturnStatus = 'requested' | 'approved' | 'in_transit' | 'received' | 'refunded' | 'rejected';
type RefundLine = {
    orderLineId: string;
    qty: number;
    amount: bigint;
};
type ReturnState = {
    status: ReturnStatus;
    orderId: string;
    lines: RefundLine[];
};
type ReturnCommand = {
    type: 'buyer.request';
    actor: Actor;
} | {
    type: 'buyer.cancel';
    actor: Actor;
} | {
    type: 'vendor.approve';
    actor: Actor;
} | {
    type: 'vendor.reject';
    actor: Actor;
} | {
    type: 'admin.override';
    to: ReturnStatus;
    actor: Actor;
} | {
    type: 'carrier.received';
    actor: Actor;
} | {
    type: 'sla.autoApprove';
    actor: Actor;
};
type ReturnEvent = {
    type: 'return.requested';
} | {
    type: 'return.approved';
} | {
    type: 'return.rejected';
} | {
    type: 'return.cancelled';
} | {
    type: 'return.in_transit';
} | {
    type: 'return.received';
} | {
    type: 'return.refunded';
} | {
    type: 'return.overridden';
    to: ReturnStatus;
};
type RefundPort = (req: RefundRequest) => Promise<RefundResult>;

declare function decideReturn(state: ReturnState, cmd: ReturnCommand): ReturnEvent[];

declare function executeRefund(db: TransactionalDatabase<OrdersSchema>, orderId: string, lines: RefundLine[], refund: RefundPort, actor: Actor): Promise<RefundResult>;

declare function reconcileStuckRefunds(db: TransactionalDatabase<OrdersSchema>, refund: RefundPort, opts?: {
    olderThan?: Date;
    limit?: number;
}): Promise<{
    scanned: number;
    settled: number;
    stillPending: number;
}>;

export { type RefundLine, type RefundPort, type ReturnCommand, type ReturnEvent, type ReturnState, type ReturnStatus, decideReturn, executeRefund, reconcileStuckRefunds };
