import { type PaymentMethod, type PaymentStatus } from "../../index.js"; export declare const PAYMENT_METHODS: ("credit_card" | "debit_card" | "cash" | "wallet" | "direct_bill" | "travel_credit" | "other" | "bank_transfer" | "cheque")[]; export declare const PAYMENT_STATUSES: ("pending" | "failed" | "completed" | "refunded")[]; export interface EditingPaymentSnapshot { id: string; invoiceId: string; amountCents: number; currency: string; baseCurrency: string | null; baseAmountCents: number | null; paymentMethod: PaymentMethod; status: PaymentStatus; paymentDate: string; referenceNumber: string | null; notes: string | null; } export interface RecordBookingPaymentDialogProps { open: boolean; onOpenChange: (open: boolean) => void; bookingId: string; /** Pre-fill currency when no invoices have loaded yet. */ defaultCurrency?: string; onRecorded?: () => void; /** * When set, the dialog runs in edit mode: it prefills from the * snapshot and PATCHes `/v1/admin/finance/payments/:id` on submit instead * of POSTing a new payment. The invoice selector is locked because * reassigning a payment to a different invoice is out of scope for * this dialog. */ editingPayment?: EditingPaymentSnapshot | null; } export interface FormState { invoiceId: string; amountCents: number; currency: string; fxRate: string; fxOverride: boolean; paymentMethod: PaymentMethod; status: PaymentStatus; paymentDate: string; referenceNumber: string; notes: string; } export declare function buildInitialFormState(currency: string): FormState; export declare function formatAmount(cents: number): string; export declare function normalizeCurrency(currency: string | null | undefined): string; export declare function parseFxRate(raw: string): number | null; export declare function deriveBaseAmountCents(amountCents: number, fxRate: number | null): number | null; export declare function formatFxRateInput(rate: number): string; export declare function formatRateDisplay(rate: number): string; export declare function formatCommissionPercent(bps: number): string;