import React from 'react';
import { TrendingUp, TrendingDown, AlertTriangle, CheckCircle, Clock, DollarSign } from 'lucide-react';
import { Card, Badge } from '../../components/ui';
import { PageHeader } from '../../components/layout';
import { DashboardCard, KPIWidget, QuickActions, RecentActivity, ActivityType, ActivityStatus } from '../../components/domain/dashboard';
const DashboardPage: React.FC = () => {
const kpiData = [
{
title: 'Ventas Hoy',
value: {
current: 1247,
previous: 1112,
format: 'currency' as const,
prefix: '€'
},
trend: {
direction: 'up' as const,
value: 12,
isPositive: true,
comparisonPeriod: 'vs ayer'
},
icon: ,
},
{
title: 'Órdenes Pendientes',
value: {
current: 23,
previous: 24,
format: 'number' as const
},
trend: {
direction: 'down' as const,
value: 4.2,
isPositive: false,
comparisonPeriod: 'vs ayer'
},
icon: ,
},
{
title: 'Productos Vendidos',
value: {
current: 156,
previous: 144,
format: 'number' as const
},
trend: {
direction: 'up' as const,
value: 8.3,
isPositive: true,
comparisonPeriod: 'vs ayer'
},
icon: ,
},
{
title: 'Stock Crítico',
value: {
current: 4,
previous: 2,
format: 'number' as const
},
trend: {
direction: 'up' as const,
value: 100,
isPositive: false,
comparisonPeriod: 'vs ayer'
},
status: 'warning' as const,
icon: ,
},
];
const quickActions = [
{
id: 'production',
title: 'Nueva Orden de Producción',
description: 'Crear nueva orden de producción',
icon: ,
onClick: () => window.location.href = '/app/operations/production',
href: '/app/operations/production'
},
{
id: 'inventory',
title: 'Gestionar Inventario',
description: 'Administrar stock de productos',
icon: ,
onClick: () => window.location.href = '/app/operations/inventory',
href: '/app/operations/inventory'
},
{
id: 'sales',
title: 'Ver Ventas',
description: 'Analizar ventas y reportes',
icon: ,
onClick: () => window.location.href = '/app/analytics/sales',
href: '/app/analytics/sales'
},
{
id: 'settings',
title: 'Configuración',
description: 'Ajustar configuración del sistema',
icon: ,
onClick: () => window.location.href = '/app/settings',
href: '/app/settings'
},
];
const recentActivities = [
{
id: '1',
type: ActivityType.PRODUCTION,
title: 'Orden de producción completada',
description: 'Pan de Molde Integral - 20 unidades',
timestamp: new Date(Date.now() - 2 * 60 * 60 * 1000).toISOString(),
status: ActivityStatus.SUCCESS,
},
{
id: '2',
type: ActivityType.INVENTORY,
title: 'Stock bajo detectado',
description: 'Levadura fresca necesita reposición',
timestamp: new Date(Date.now() - 3 * 60 * 60 * 1000).toISOString(),
status: ActivityStatus.WARNING,
},
{
id: '3',
type: ActivityType.SALES,
title: 'Venta registrada',
description: '€45.50 - Croissants y café',
timestamp: new Date(Date.now() - 4 * 60 * 60 * 1000).toISOString(),
status: ActivityStatus.INFO,
},
];
const productionStatus = {
today: {
target: 150,
completed: 95,
inProgress: 18,
pending: 37,
},
efficiency: 85,
};
const salesData = {
today: 1247,
yesterday: 1112,
thisWeek: 8934,
thisMonth: 35678,
};
const inventoryAlerts = [
{ item: 'Levadura Fresca', current: 2, min: 5, status: 'critical' },
{ item: 'Harina Integral', current: 8, min: 10, status: 'low' },
{ item: 'Mantequilla', current: 15, min: 20, status: 'low' },
];
const topProducts = [
{ name: 'Pan de Molde', sold: 45, revenue: 202.50 },
{ name: 'Croissants', sold: 32, revenue: 192.00 },
{ name: 'Baguettes', sold: 28, revenue: 84.00 },
{ name: 'Magdalenas', sold: 24, revenue: 72.00 },
];
return (
{/* KPI Cards */}
{kpiData.map((kpi, index) => (
))}
{/* Production Status */}
Estado de Producción
Progreso del Día
{productionStatus.today.completed} / {productionStatus.today.target}
{productionStatus.today.completed}
Completado
{productionStatus.today.inProgress}
En Proceso
{productionStatus.today.pending}
Pendiente
Eficiencia
{productionStatus.efficiency}%
{/* Sales Summary */}
Resumen de Ventas
Hoy
€{salesData.today.toLocaleString()}
Ayer
€{salesData.yesterday.toLocaleString()}
{salesData.today > salesData.yesterday ? (
) : (
)}
Esta Semana
€{salesData.thisWeek.toLocaleString()}
Este Mes
€{salesData.thisMonth.toLocaleString()}
Crecimiento vs ayer
+{(((salesData.today - salesData.yesterday) / salesData.yesterday) * 100).toFixed(1)}%
{/* Inventory Alerts */}
Alertas de Inventario
{inventoryAlerts.map((alert, index) => (
{alert.item}
Stock: {alert.current} / Mín: {alert.min}
{alert.status === 'critical' ? 'Crítico' : 'Bajo'}
))}
{/* Top Products */}
Productos Más Vendidos
{topProducts.map((product, index) => (
{index + 1}.
{product.name}
{product.sold} unidades
€{product.revenue.toFixed(2)}
))}
{/* Recent Activity */}
Actividad Reciente
{/* Quick Actions */}
Acciones Rápidas
);
};
export default DashboardPage;