export * from "./common";
export * from "./auth";
export * from "./collection";
export * from "./disbursement";
export declare namespace OneKhusaTypes {
    type Environment = "DEVELOPMENT" | "PRODUCTION";
    interface PaginationParams {
        page?: number;
        size?: number;
    }
    interface PaginatedResponse<T> {
        content: T[];
        pageable: {
            pageNumber: number;
            pageSize: number;
            sort: {
                empty: boolean;
                sorted: boolean;
                unsorted: boolean;
            };
            offset: number;
            paged: boolean;
            unpaged: boolean;
        };
        last: boolean;
        totalPages: number;
        totalElements: number;
        first: boolean;
        size: number;
        number: number;
        sort: {
            empty: boolean;
            sorted: boolean;
            unsorted: boolean;
        };
        numberOfElements: number;
        empty: boolean;
    }
    interface ErrorResponse {
        errorMessage: string;
        statusCode: number;
        errorObject?: string;
    }
    type DisbursementStatus = "PENDING" | "APPROVED" | "REVIEWED" | "REJECTED" | "CANCELLED" | "PROCESSING" | "COMPLETED" | "FAILED";
    type CollectionStatus = "PENDING" | "COMPLETED" | "FAILED" | "CANCELLED" | "EXPIRED";
    type PaymentMethod = "MOBILE_MONEY" | "BANK_TRANSFER";
    type Currency = "MWK" | "USD" | "ZAR" | "ZMW" | "TZS" | "KES" | "UGX";
    interface Recipient {
        name: string;
        phone: string;
        email?: string;
        accountNumber?: string;
        bankCode?: string;
    }
    interface ApiResponse<T> {
        success: boolean;
        message?: string;
        data?: T;
    }
    interface TokenRequest {
        grant_type: "client_credentials";
        client_id: string;
        client_secret: string;
    }
    interface TokenResponse {
        access_token: string;
        token_type: string;
        expires_in: number;
        scope?: string;
    }
    interface CachedToken {
        accessToken: string;
        expiresAt: number;
    }
    interface InitiateCollectionRequest {
        amount: number;
        currency: Currency;
        phone: string;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        callbackUrl?: string;
        metadata?: Record<string, string>;
    }
    interface CollectionResponse {
        id: string;
        tan: string;
        amount: number;
        currency: Currency;
        status: CollectionStatus;
        phone: string;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        createdAt: string;
        updatedAt: string;
        expiresAt?: string;
        metadata?: Record<string, string>;
    }
    interface CollectionTransaction {
        id: string;
        collectionId: string;
        tan: string;
        amount: number;
        fee?: number;
        currency: Currency;
        status: CollectionStatus;
        phone: string;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        providerReference?: string;
        failureReason?: string;
        createdAt: string;
        updatedAt: string;
        completedAt?: string;
        metadata?: Record<string, string>;
    }
    interface GetCollectionTransactionsParams {
        page?: number;
        size?: number;
        status?: CollectionStatus;
        startDate?: string;
        endDate?: string;
    }
    type CollectionTransactionsResponse = PaginatedResponse<CollectionTransaction>;
    interface SingleDisbursementRequest {
        amount: number;
        currency: Currency;
        recipient: Recipient;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        callbackUrl?: string;
        metadata?: Record<string, string>;
    }
    interface SingleDisbursementResponse {
        id: string;
        amount: number;
        fee?: number;
        currency: Currency;
        status: DisbursementStatus;
        recipient: Recipient;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        providerReference?: string;
        failureReason?: string;
        createdAt: string;
        updatedAt: string;
        approvedAt?: string;
        reviewedAt?: string;
        completedAt?: string;
        metadata?: Record<string, string>;
    }
    interface BatchDisbursementItem {
        amount: number;
        currency: Currency;
        recipient: Recipient;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        metadata?: Record<string, string>;
    }
    interface AddBatchDisbursementRequest {
        name: string;
        description?: string;
        items: BatchDisbursementItem[];
        callbackUrl?: string;
    }
    interface BatchDisbursementResponse {
        id: string;
        name: string;
        description?: string;
        status: DisbursementStatus;
        totalAmount: number;
        totalFee?: number;
        currency: Currency;
        itemCount: number;
        successCount?: number;
        failedCount?: number;
        createdAt: string;
        updatedAt: string;
        approvedAt?: string;
        reviewedAt?: string;
        completedAt?: string;
    }
    interface BatchTransaction {
        id: string;
        batchId: string;
        amount: number;
        fee?: number;
        currency: Currency;
        status: DisbursementStatus;
        recipient: Recipient;
        paymentMethod: PaymentMethod;
        reference?: string;
        description?: string;
        providerReference?: string;
        failureReason?: string;
        createdAt: string;
        updatedAt: string;
        completedAt?: string;
        metadata?: Record<string, string>;
    }
    interface GetBatchesParams {
        page?: number;
        size?: number;
        status?: DisbursementStatus;
        startDate?: string;
        endDate?: string;
    }
    interface GetBatchTransactionsParams {
        page?: number;
        size?: number;
        status?: DisbursementStatus;
    }
    type BatchesResponse = PaginatedResponse<BatchDisbursementResponse>;
    type BatchTransactionsResponse = PaginatedResponse<BatchTransaction>;
    interface ApprovalRequest {
        comment?: string;
    }
    interface ReviewRequest {
        comment?: string;
    }
    interface RejectionRequest {
        reason: string;
    }
    interface CancellationRequest {
        reason?: string;
    }
    interface TransferFundsRequest {
        sourceAccount?: string;
    }
    interface TransferFundsResponse {
        success: boolean;
        message: string;
        transactionId?: string;
    }
}
export default OneKhusaTypes;
//# sourceMappingURL=index.d.ts.map