import React, { useState } from 'react'; import { Users, Clock, TrendingUp, MapPin, Calendar, BarChart3, Download, Filter } from 'lucide-react'; import { Button, Card, Badge } from '../../../../components/ui'; import { PageHeader } from '../../../../components/layout'; const TrafficPage: React.FC = () => { const [selectedPeriod, setSelectedPeriod] = useState('week'); const [selectedMetric, setSelectedMetric] = useState('visitors'); const trafficData = { totalVisitors: 2847, peakHour: '12:00', averageVisitDuration: '23min', busyDays: ['Viernes', 'Sábado'], conversionRate: 68.4 }; const hourlyTraffic = [ { hour: '07:00', visitors: 15, sales: 12, duration: '18min' }, { hour: '08:00', visitors: 32, sales: 24, duration: '22min' }, { hour: '09:00', visitors: 45, sales: 28, duration: '25min' }, { hour: '10:00', visitors: 38, sales: 25, duration: '24min' }, { hour: '11:00', visitors: 52, sales: 35, duration: '26min' }, { hour: '12:00', visitors: 78, sales: 54, duration: '28min' }, { hour: '13:00', visitors: 85, sales: 58, duration: '30min' }, { hour: '14:00', visitors: 62, sales: 42, duration: '27min' }, { hour: '15:00', visitors: 48, sales: 32, duration: '25min' }, { hour: '16:00', visitors: 55, sales: 38, duration: '26min' }, { hour: '17:00', visitors: 68, sales: 46, duration: '29min' }, { hour: '18:00', visitors: 74, sales: 52, duration: '31min' }, { hour: '19:00', visitors: 56, sales: 39, duration: '28min' }, { hour: '20:00', visitors: 28, sales: 18, duration: '22min' } ]; const dailyTraffic = [ { day: 'Lun', visitors: 245, sales: 168, conversion: 68.6, avgDuration: '22min' }, { day: 'Mar', visitors: 289, sales: 195, conversion: 67.5, avgDuration: '24min' }, { day: 'Mié', visitors: 321, sales: 218, conversion: 67.9, avgDuration: '25min' }, { day: 'Jue', visitors: 356, sales: 242, conversion: 68.0, avgDuration: '26min' }, { day: 'Vie', visitors: 445, sales: 312, conversion: 70.1, avgDuration: '28min' }, { day: 'Sáb', visitors: 498, sales: 348, conversion: 69.9, avgDuration: '30min' }, { day: 'Dom', visitors: 398, sales: 265, conversion: 66.6, avgDuration: '27min' } ]; const trafficSources = [ { source: 'Pie', visitors: 1245, percentage: 43.7, trend: 5.2 }, { source: 'Búsqueda Local', visitors: 687, percentage: 24.1, trend: 12.3 }, { source: 'Recomendaciones', visitors: 423, percentage: 14.9, trend: -2.1 }, { source: 'Redes Sociales', visitors: 298, percentage: 10.5, trend: 8.7 }, { source: 'Publicidad', visitors: 194, percentage: 6.8, trend: 15.4 } ]; const customerSegments = [ { segment: 'Regulares Matutinos', count: 145, percentage: 24.2, peakHours: ['07:00-09:00'], avgSpend: 12.50, frequency: 'Diaria' }, { segment: 'Familia Fin de Semana', count: 198, percentage: 33.1, peakHours: ['10:00-13:00'], avgSpend: 28.90, frequency: 'Semanal' }, { segment: 'Oficinistas Almuerzo', count: 112, percentage: 18.7, peakHours: ['12:00-14:00'], avgSpend: 8.75, frequency: '2-3x semana' }, { segment: 'Clientes Ocasionales', count: 143, percentage: 23.9, peakHours: ['16:00-19:00'], avgSpend: 15.20, frequency: 'Mensual' } ]; const getTrendColor = (trend: number) => { return trend >= 0 ? 'text-green-600' : 'text-red-600'; }; const getTrendIcon = (trend: number) => { return trend >= 0 ? '↗' : '↘'; }; const maxVisitors = Math.max(...hourlyTraffic.map(h => h.visitors)); const maxDailyVisitors = Math.max(...dailyTraffic.map(d => d.visitors)); return (
} /> {/* Traffic Stats */}

Visitantes Totales

{trafficData.totalVisitors.toLocaleString()}

Hora Pico

{trafficData.peakHour}

Duración Promedio

{trafficData.averageVisitDuration}

Conversión

{trafficData.conversionRate}%

Días Ocupados

{trafficData.busyDays.join(', ')}

{/* Controls */}
{/* Hourly Traffic */}

Tráfico por Hora

{hourlyTraffic.map((data, index) => (
{data.visitors}
{data.hour}
))}
{/* Daily Traffic */}

Tráfico Semanal

{dailyTraffic.map((data, index) => (
{data.visitors}
{data.day}
{data.conversion}%
))}
{/* Traffic Sources */}

Fuentes de Tráfico

{trafficSources.map((source, index) => (

{source.source}

{source.visitors} visitantes

{source.percentage}%

{getTrendIcon(source.trend)} {Math.abs(source.trend).toFixed(1)}%
))}
{/* Customer Segments */}

Segmentos de Clientes

{customerSegments.map((segment, index) => (

{segment.segment}

{segment.percentage}%

Clientes

{segment.count}

Gasto Promedio

€{segment.avgSpend}

Horario Pico

{segment.peakHours.join(', ')}

Frecuencia

{segment.frequency}

))}
{/* Traffic Heat Map placeholder */}

Mapa de Calor - Zonas de la Panadería

Visualización de zonas de mayor tráfico

Entrada: 45% • Mostrador: 32% • Zona sentada: 23%

); }; export default TrafficPage;