import { api } from './client'; export type TicketingManualPaymentSettings = { enabled: boolean; manualQrMode: 'upload' | 'dynamic'; upiQrImageUrl: string; upiId: string; payeeName: string; instructions: string; platformFeeInr: number; platformFeeInrIsDefault: boolean; /** One-time unlock fee (INR) — same as charged in checkout-order. */ enablementFeeInr: number; enablementPaid: boolean; enablementPaidAt: string | null; }; export type TicketManualOrderRow = { _id: string; status: string; createdAt?: string; purchaserEmail: string; screenshotUrl: string; buyerNote?: string; quote: Record | null; currency: string; ticket: { _id: string; name: string } | null; reviewedAt?: string; rejectReason?: string; fulfillmentParticipantIds?: string[]; }; export type PatchTicketingManualPayload = Partial<{ enabled: boolean; manualQrMode: 'upload' | 'dynamic'; upiQrImageUrl: string; upiId: string; payeeName: string; instructions: string; platformFeeInr: number | null; }>; export const eventTicketingManualApi = { async get(eventId: string): Promise { const r = await api.get<{ ticketingManualPayment: TicketingManualPaymentSettings }>( `/events/${eventId}/ticketing-manual-payment`, ); if (r.error || !r.data?.ticketingManualPayment) throw new Error(r.error ?? 'Failed to load manual payment settings'); return r.data.ticketingManualPayment; }, async patch(eventId: string, payload: PatchTicketingManualPayload): Promise { const r = await api.patch<{ ticketingManualPayment: TicketingManualPaymentSettings }>( `/events/${eventId}/ticketing-manual-payment`, payload, ); if (r.error || !r.data?.ticketingManualPayment) throw new Error(r.error ?? 'Failed to save'); return r.data.ticketingManualPayment; }, async checkoutEnablementOrder(eventId: string): Promise<{ keyId: string; orderId: string; amount: number; currency: string; transactionId: string; checkoutSource: string; enablementFeeInr: number; }> { const r = await api.post<{ keyId: string; orderId: string; amount: number; currency: string; transactionId: string; checkoutSource: string; enablementFeeInr: number; }>(`/events/${eventId}/ticketing-manual-enablement/checkout-order`, {}); if (r.error || !r.data) throw new Error(r.error ?? 'Failed to create payment order'); return r.data; }, }; export const ticketManualOrdersApi = { async list(eventId: string, status: 'pending_review' | 'approved' | 'rejected' | 'all' = 'pending_review') { const q = status === 'pending_review' ? '' : `?status=${encodeURIComponent(status)}`; const r = await api.get<{ orders: TicketManualOrderRow[] }>(`/events/${eventId}/ticket-manual-orders${q}`); if (r.error) throw new Error(r.error); return r.data?.orders ?? []; }, async approve(eventId: string, orderId: string): Promise { const r = await api.post<{ ok: boolean }>(`/events/${eventId}/ticket-manual-orders/${orderId}/approve`, {}); if (r.error) throw new Error(r.error); }, async reject(eventId: string, orderId: string, reason?: string): Promise { const r = await api.post<{ ok: boolean }>(`/events/${eventId}/ticket-manual-orders/${orderId}/reject`, { reason }); if (r.error) throw new Error(r.error); }, };