import { apiGet, apiPost } from '@/lib/http' import type { FinanceAccount, FinanceJournalEntry, FinancePeriod, FinanceReconciliation, FinanceReconciliationItem, FinanceTrialBalance, } from '@/types/admin/finance-ledger' export function fetchFinanceAccounts() { return apiGet<{ items: FinanceAccount[] }>('/api/v1/admin/finance/ledger/accounts') } export function fetchFinanceTrialBalance(params: { dateFrom: string; dateTo: string }) { return apiGet('/api/v1/admin/finance/ledger/trial-balance', params) } export function fetchFinanceJournalEntries(params: { dateFrom?: string dateTo?: string page?: number pageSize?: number }) { return apiGet<{ items: FinanceJournalEntry[] pagination: { page: number; pageSize: number; total: number } }>('/api/v1/admin/finance/ledger/entries', params) } export function syncFinanceLedger(payload: { dateFrom?: string; dateTo?: string }) { return apiPost<{ created: number; skipped: number }>('/api/v1/admin/finance/ledger/sync', payload) } export function createFinanceManualVoucher(payload: { occurredAt?: string memo?: string reference?: string lines: Array<{ accountCode: string debitFen?: number creditFen?: number memo?: string }> }) { return apiPost<{ entryId: number; entryNo: string }>( '/api/v1/admin/finance/ledger/manual-voucher', payload, ) } export function fetchFinancePeriods() { return apiGet<{ items: FinancePeriod[] }>('/api/v1/admin/finance/periods') } export function closeFinancePeriod(periodKey: string) { return apiPost<{ periodKey: string }>( `/api/v1/admin/finance/periods/${encodeURIComponent(periodKey)}/close`, {}, ) } export function reopenFinancePeriod(periodKey: string) { return apiPost( `/api/v1/admin/finance/periods/${encodeURIComponent(periodKey)}/reopen`, {}, ) } export function fetchFinanceReconciliations(params?: { page?: number pageSize?: number provider?: string }) { return apiGet<{ items: FinanceReconciliation[] pagination: { page: number; pageSize: number; total: number } }>('/api/v1/admin/finance/reconciliations', params) } export function fetchFinanceReconciliation(id: number) { return apiGet( `/api/v1/admin/finance/reconciliations/${id}`, ) } export function importFinanceReconciliation(payload: { provider: string periodFrom: string periodTo: string rows: Array<{ platformOrderId: string entryType: 'sale' | 'refund' amountFen: number externalRef?: string occurredAt?: string }> }) { return apiPost<{ reconciliationId: number status: string rows: number matched: number mismatched: number expectedFen: number actualFen: number diffFen: number }>('/api/v1/admin/finance/reconciliations/import', payload) } export function resolveFinanceReconciliation(id: number, note: string) { return apiPost(`/api/v1/admin/finance/reconciliations/${id}/resolve`, { note, }) }