import React from 'react'; import { motion } from 'framer-motion'; import { Brain, Trophy, Clock, AlertTriangle } from 'lucide-react'; const ROAD_LABELS = ['Road A', 'Road B', 'Road C', 'Road D']; const MAX_SIG = 90, MIN_SIG = 15; const calcSig = (count, max) => Math.max(MIN_SIG, Math.round((count / (max || 1)) * MAX_SIG)); const RANK_STYLES = [ { badge: '#ef4444', badgeBg: 'rgba(239,68,68,0.15)', label: '1st Priority', barColor: '#dc2626' }, { badge: '#f97316', badgeBg: 'rgba(249,115,22,0.15)', label: '2nd Priority', barColor: '#ea580c' }, { badge: '#f59e0b', badgeBg: 'rgba(245,158,11,0.15)', label: '3rd Priority', barColor: '#d97706' }, { badge: '#64748b', badgeBg: 'rgba(100,116,139,0.10)', label: '4th Priority', barColor: '#475569' }, ]; const SignalRecommendationTable = ({ vehicleData = [] }) => { const maxCount = Math.max(...vehicleData.map(d => d?.count || 0), 1); const sorted = [...vehicleData] .map((d, i) => ({ index: i, label: ROAD_LABELS[i] || `Road ${i+1}`, count: d?.count || 0, signalTime: calcSig(d?.count || 0, maxCount), })) .sort((a, b) => b.count - a.count); return (
{/* Header */}
Step 4 — AI Signal Plan

AI Signal Recommendation

Proportional green-light allocation — busiest road gets up to {MAX_SIG}s, minimum {MIN_SIG}s guaranteed

{/* Info Banner */}
Signal time formula: green_time = max({MIN_SIG}, round(count / max_count × {MAX_SIG})). Higher vehicle count = longer green light = cleared faster.
{/* Table Wrapper for horizontal scroll on mobile */}
{/* Table Header */}
Road Vehicles Priority Signal Allocation
{sorted.map((road, rank) => { const rs = RANK_STYLES[rank] || RANK_STYLES[3]; const pct = (road.signalTime / MAX_SIG) * 100; return (
{rank === 0 && } {road.label}
{road.count}
{rs.label}
{road.signalTime}s
{pct.toFixed(0)}%
); })}
{/* Signal Visual Cards */}
{sorted.map((road, rank) => { const rs = RANK_STYLES[rank] || RANK_STYLES[3]; return (
#{rank+1}
{road.label}
{road.count} vehicles
{road.signalTime}s
green time
); })}
); }; export default SignalRecommendationTable;