import { Invoice, TenantInfo, DianResolutionInfo, FiscalMetrics } from '../types/index.js'; const API_BASE = '/api/v1'; const MASTER_API_KEY = 'dev_master_key_innovacion_2026_secure'; async function fetchWithAuth(url: string, options: RequestInit = {}) { const headers = { 'Content-Type': 'application/json', 'x-api-key': MASTER_API_KEY, ...(options.headers || {}), }; const response = await fetch(`${API_BASE}${url}`, { ...options, headers, }); if (!response.ok) { const errorBody = await response.json().catch(() => ({ message: 'Error de conexión' })); throw new Error(errorBody.message || `Error HTTP ${response.status}`); } return response.json(); } export const hubApi = { async getMetrics(tenantId?: string): Promise { const query = tenantId && tenantId !== 'all' ? `?tenantId=${tenantId}` : ''; const res = await fetchWithAuth(`/invoices/metrics${query}`); return res.data; }, async getInvoices(tenantId?: string, search?: string): Promise<{ items: Invoice[]; total: number }> { const params = new URLSearchParams(); if (tenantId && tenantId !== 'all') params.append('tenantId', tenantId); if (search) params.append('busqueda', search); const qs = params.toString() ? `?${params.toString()}` : ''; const res = await fetchWithAuth(`/invoices${qs}`); return { items: res.data, total: res.total }; }, async getTenants(): Promise { const res = await fetchWithAuth('/tenants'); return res.data; }, async getResolutions(): Promise { const res = await fetchWithAuth('/resolutions'); return res.data; }, async emitInvoice(payload: any, tenantId: string): Promise { const res = await fetchWithAuth('/invoices', { method: 'POST', body: JSON.stringify({ ...payload, tenantId }), }); return res.data; }, async getXml(invoiceId: string): Promise { const response = await fetch(`${API_BASE}/invoices/${invoiceId}/xml`, { headers: { 'x-api-key': MASTER_API_KEY }, }); if (!response.ok) throw new Error('No se pudo obtener el XML'); return response.text(); }, getPdfUrl(invoiceId: string): string { return `${API_BASE}/invoices/${invoiceId}/pdf`; }, };