import { apiRequest } from '../lib/api' import type { CreateInvoiceItemTemplatePayload, CreateInvoicePayload, CreateInvoiceTemplatePayload, Invoice, InvoiceItemTemplate, InvoiceItemTemplatesResponse, InvoiceStatus, InvoiceTemplate, InvoiceTemplatesListResponse, InvoicesListResponse, PublicInvoice, UpdateInvoiceItemTemplatePayload, UpdateInvoicePayload, UpdateInvoiceTemplatePayload, } from '../types/invoice' export function listInvoiceItemTemplates(signal?: AbortSignal) { return apiRequest('/invoice-item-templates', { auth: true, signal, }) } export function createInvoiceItemTemplate(payload: CreateInvoiceItemTemplatePayload) { return apiRequest('/invoice-item-templates', { method: 'POST', auth: true, body: payload, }) } export function updateInvoiceItemTemplate( templateId: string, payload: UpdateInvoiceItemTemplatePayload, ) { return apiRequest(`/invoice-item-templates/${templateId}`, { method: 'PATCH', auth: true, body: payload, }) } export function deleteInvoiceItemTemplate(templateId: string) { return apiRequest<{ ok: boolean }>(`/invoice-item-templates/${templateId}`, { method: 'DELETE', auth: true, }) } export function listInvoiceTemplates(signal?: AbortSignal) { return apiRequest('/invoice-templates', { auth: true, signal, }) } export function getInvoiceTemplate(templateId: string, signal?: AbortSignal) { return apiRequest(`/invoice-templates/${templateId}`, { auth: true, signal, }) } export function createInvoiceTemplate(payload: CreateInvoiceTemplatePayload) { return apiRequest('/invoice-templates', { method: 'POST', auth: true, body: payload, }) } export function updateInvoiceTemplate(templateId: string, payload: UpdateInvoiceTemplatePayload) { return apiRequest(`/invoice-templates/${templateId}`, { method: 'PATCH', auth: true, body: payload, }) } export function deleteInvoiceTemplate(templateId: string) { return apiRequest<{ ok: boolean }>(`/invoice-templates/${templateId}`, { method: 'DELETE', auth: true, }) } export interface ListBusinessInvoicesParams { page?: number pageSize?: number status?: InvoiceStatus } export function listBusinessInvoices( businessId: string, params: ListBusinessInvoicesParams = {}, signal?: AbortSignal, ) { const search = new URLSearchParams() if (params.page) search.set('page', String(params.page)) if (params.pageSize) search.set('pageSize', String(params.pageSize)) if (params.status) search.set('status', params.status) const qs = search.toString() return apiRequest( `/businesses/${businessId}/invoices${qs ? `?${qs}` : ''}`, { auth: true, signal }, ) } export function getBusinessInvoice(businessId: string, invoiceId: string, signal?: AbortSignal) { return apiRequest(`/businesses/${businessId}/invoices/${invoiceId}`, { auth: true, signal, }) } export function createBusinessInvoice(businessId: string, payload: CreateInvoicePayload) { return apiRequest(`/businesses/${businessId}/invoices`, { method: 'POST', auth: true, body: payload, }) } export function updateBusinessInvoice( businessId: string, invoiceId: string, payload: UpdateInvoicePayload, ) { return apiRequest(`/businesses/${businessId}/invoices/${invoiceId}`, { method: 'PUT', auth: true, body: payload, }) } export function updateBusinessInvoiceStatus( businessId: string, invoiceId: string, payload: { status: InvoiceStatus; notes?: string }, ) { return apiRequest(`/businesses/${businessId}/invoices/${invoiceId}`, { method: 'PATCH', auth: true, body: payload, }) } export function deleteBusinessInvoice(businessId: string, invoiceId: string) { return apiRequest<{ ok: boolean }>(`/businesses/${businessId}/invoices/${invoiceId}`, { method: 'DELETE', auth: true, }) } /** Public show-page payload (no auth). Lookup by opaque publicId. */ export function getPublicInvoice(publicId: string, signal?: AbortSignal) { return apiRequest(`/public/invoices/${publicId}`, { auth: false, signal, }) } /** Public approve (no auth). issued → approved. */ export function approvePublicInvoice(publicId: string) { return apiRequest(`/public/invoices/${publicId}/approve`, { method: 'POST', auth: false, }) }