import { renderInvoiceStatusChart } from './charts/InvoiceStatusChart.js';
import { renderBarChart } from './charts/BarChart.js';
// Configuración de las tarjetas de estadísticas
const statsConfig = [
{
id: 'totalFacturado',
title: 'Total Facturado',
icon: ``,
iconBg: '#374151',
valueColor: '#1f2937',
subtitle: 'Este mes',
formatValue: (val) => `${val.toLocaleString('es-ES', { minimumFractionDigits: 2 })} €`
},
{
id: 'facturasEmitidas',
title: 'Facturas Emitidas',
icon: ``,
iconBg: '#22c55e',
valueColor: '#1f2937',
subtitle: 'Este mes',
formatValue: (val) => val.toString()
},
{
id: 'clientesActivos',
title: 'Clientes Activos',
icon: ``,
iconBg: '#f59e0b',
valueColor: '#1f2937',
subtitle: 'Con factura este mes',
formatValue: (val) => val.toString()
},
{
id: 'pendienteCobro',
title: 'Pendiente de Cobro',
icon: ``,
iconBg: '#8b5cf6',
valueColor: '#1f2937',
subtitle: 'Facturas vencidas',
formatValue: (val) => val.toString()
}
];
// Función para crear una tarjeta individual
function createStatCard(config, value) {
return `
${config.icon}
${config.title}
${config.formatValue(value)}
${config.subtitle}
`;
}
// Función para renderizar todas las tarjetas
export function renderStatsCards(data = {}) {
const defaultData = {
totalFacturado: 0,
facturasEmitidas: 0,
clientesActivos: 0,
pendienteCobro: 0
};
const statsData = { ...defaultData, ...data };
return statsConfig
.map(config => createStatCard(config, statsData[config.id]))
.join('');
}
// Función para actualizar un valor específico
export function updateStatValue(containerId, statId, newValue) {
const container = document.querySelector(`#${containerId} [data-stat-id="${statId}"] .stat-value`);
if (container) {
const config = statsConfig.find(c => c.id === statId);
if (config) {
container.textContent = config.formatValue(newValue);
}
}
}
// Dashboard completo con estilos incluidos
export function renderDashboard(initialData = {}) {
const container = document.createElement('div');
container.className = 'dashboard-container';
// Datos por defecto (puedes pasarlos como parámetro)
const data = {
totalFacturado: 50.00,
facturasEmitidas: 0,
clientesActivos: 0,
pendienteCobro: 0,
...initialData
};
container.innerHTML = /*html*/`
Dashboard
Resumen de facturación y estado de tus facturas
${renderStatsCards(data)}
`;
const chartsRow = container.querySelector('#charts-row');
chartsRow.appendChild(renderInvoiceStatusChart());
chartsRow.appendChild(renderBarChart());
return container;
}
// Ejemplo de uso:
// import { renderDashboard, updateStatValue } from './dashboard-stats.js';
//
// // Renderizar con datos iniciales
// const dashboard = renderDashboard({
// totalFacturado: 50.00,
// facturasEmitidas: 0,
// clientesActivos: 0,
// pendienteCobro: 0
// });
// document.body.appendChild(dashboard);
//
// // Actualizar un valor dinámicamente
// updateStatValue('stats-container', 'totalFacturado', 1500.50);