import { apiClient } from './client' import type { AcceptInvitePayload, Account, AdjustBalancePayload, AdjustBalanceResult, BalancesReport, BudgetCategory, BudgetSummary, CashFlowMonth, CategorizeBatchPayload, CategorizeBatchResult, CategoryDefinition, CategorySpendItem, ConfirmImportPayload, CreateAccountPayload, CreateCategoryPayload, CreateOperationPayload, ExportInfo, ExpectedIncome, ExpectedIncomePayload, ImportDetail, ImportSummary, LoginPayload, Operation, OperationFilters, Page, PatchCategoryDefinitionPayload, PlanFactReport, PasswordResetPayload, ResolveHoldPayload, SaveRowDecisionPayload, SpaceDeletionStatus, User, } from './types' export const api = { auth: { me: () => apiClient.get('/auth/me'), login: (payload: LoginPayload) => apiClient.post('/auth/login', { json: payload }), logout: () => apiClient.post('/auth/logout'), acceptInvite: (payload: AcceptInvitePayload) => apiClient.post('/auth/invitations/accept', { json: payload }), requestPasswordReset: (email: string) => apiClient.post<{ accepted: boolean }>('/auth/password-reset', { json: { email } }), confirmPasswordReset: (payload: PasswordResetPayload) => apiClient.post('/auth/password-reset/confirm', { json: payload }), }, accounts: { list: () => apiClient.get('/accounts'), create: (payload: CreateAccountPayload) => apiClient.post('/accounts', { json: payload }), archive: (id: string) => apiClient.patch(`/accounts/${id}`, { json: { status: 'archived' } }), adjustBalance: (id: string, payload: AdjustBalancePayload) => apiClient.post(`/accounts/${id}/adjust-balance`, { json: payload }), }, operations: { list: (filters: OperationFilters) => apiClient.get>('/operations', { query: { ...filters } }), create: (payload: CreateOperationPayload) => apiClient.post('/operations', { json: payload }), void: (id: string, reason: string) => apiClient.post(`/operations/${id}/void`, { json: { reason } }), categorize: (id: string, categoryId: string) => apiClient.patch(`/operations/${id}`, { json: { categoryId } }), categorizeBatch: (payload: CategorizeBatchPayload) => apiClient.post('/operations/categorize-batch', { json: payload }), savingsTransfer: (id: string) => apiClient.post(`/operations/${id}/savings-transfer`), savingsTransferRevert: (id: string) => apiClient.post(`/operations/${id}/savings-transfer/revert`), }, budget: { summary: (month: string) => apiClient.get('/budget/summary', { query: { month } }), categories: (month: string) => apiClient.get('/budget/categories', { query: { month } }), updatePlan: (categoryId: string, month: string, plannedKopecks: number) => apiClient.patch(`/budget/categories/${categoryId}`, { json: { month, plannedKopecks }, }), fund: (categoryId: string, month: string, amountKopecks: number) => apiClient.post(`/budget/categories/${categoryId}/fund`, { json: { month, amountKopecks }, }), close: (month: string) => apiClient.post('/budget/close', { json: { month } }), reopen: (month: string) => apiClient.post('/budget/reopen', { json: { month } }), copyPrevious: (month: string) => apiClient.post('/budget/copy-previous', { json: { month } }), categoryDefinitions: (includeArchived: boolean) => apiClient.get('/budget/category-definitions', { query: { includeArchived }, }), createCategory: (payload: CreateCategoryPayload) => apiClient.post('/budget/categories', { json: payload }), updateCategoryDefinition: (id: string, payload: PatchCategoryDefinitionPayload) => apiClient.patch(`/budget/category-definitions/${id}`, { json: payload }), createExpectedIncome: (month: string, payload: ExpectedIncomePayload) => apiClient.post(`/budget/${month.replace('-', '/')}/expected-incomes`, { json: payload }), updateExpectedIncome: (month: string, id: string, payload: ExpectedIncomePayload) => apiClient.patch(`/budget/${month.replace('-', '/')}/expected-incomes/${id}`, { json: payload }), deleteExpectedIncome: (month: string, id: string) => apiClient.delete(`/budget/${month.replace('-', '/')}/expected-incomes/${id}`), }, imports: { list: (month?: string) => apiClient.get('/imports', { query: { month } }), get: (id: string) => apiClient.get(`/imports/${id}`), upload: (file: File, accountId: string) => { const formData = new FormData() formData.append('file', file) formData.append('accountId', accountId) return apiClient.post('/imports', { formData }) }, saveRowDecision: (id: string, rowId: string, payload: SaveRowDecisionPayload) => apiClient.patch(`/imports/${id}/rows/${rowId}`, { json: payload }), resolveHold: (id: string, rowId: string, payload: ResolveHoldPayload) => apiClient.post(`/imports/${id}/rows/${rowId}/resolve`, { json: payload }), confirm: (id: string, payload: ConfirmImportPayload) => apiClient.post(`/imports/${id}/confirm`, { json: payload }), reparse: (id: string) => apiClient.post(`/imports/${id}/reparse`), revert: (id: string) => apiClient.post(`/imports/${id}/revert`), }, analytics: { categorySpend: (from: string, to: string) => apiClient.get('/analytics/category-spend', { query: { from, to } }), planFact: (month: string) => apiClient.get('/analytics/plan-fact', { query: { month } }), cashFlow: (from: string, to: string) => apiClient.get('/analytics/cash-flow', { query: { from, to } }), balances: () => apiClient.get('/analytics/balances'), }, exports: { request: () => apiClient.post('/exports'), get: (id: string) => apiClient.get(`/exports/${id}`), }, spaces: { deletionStatus: () => apiClient.get('/spaces/current/deletion'), requestDeletion: (confirmationPhrase: string) => apiClient.post('/spaces/current/deletion', { json: { confirmationPhrase }, }), cancelDeletion: () => apiClient.delete('/spaces/current/deletion'), }, }