import { Card, CardContent } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Plane, Clock, Terminal } from "lucide-react"; import { motion } from "framer-motion"; interface FlightApiResponse { data: Array<{ flight_date: string; flight_status: string; departure: { airport: string; timezone: string; iata: string; terminal: string | null; gate: string | null; delay: number | null; scheduled: string; }; arrival: { airport: string; timezone: string; iata: string; terminal: string | null; gate: string | null; delay: number | null; scheduled: string; }; airline: { name: string; iata: string; }; flight: { number: string; iata: string; duration: number | null; }; }>; } interface FlightTrackerProps { data: FlightApiResponse; } export function FlightTracker({ data }: FlightTrackerProps) { if (!data?.data?.[0]) { return null; } const flight = data.data[0]; const formatTime = (timestamp: string) => { const date = new Date(timestamp); return date.toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', hour12: false, timeZone: 'UTC' }) + ' UTC'; }; const formatDate = (timestamp: string) => { return new Date(timestamp).toLocaleDateString('en-US', { year: 'numeric', month: '2-digit', day: '2-digit' }); }; const mapStatus = (status: string): "LANDED" | "DEPARTING ON TIME" | "DELAYED" | "SCHEDULED" => { switch (status.toLowerCase()) { case 'landed': return 'LANDED'; case 'active': return flight.departure.delay ? 'DELAYED' : 'DEPARTING ON TIME'; case 'scheduled': return 'SCHEDULED'; default: return 'SCHEDULED'; } }; const getStatusColor = (status: string) => { switch (status) { case "LANDED": return "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200"; case "DEPARTING ON TIME": return "bg-green-100 text-green-800 dark:bg-green-900 dark:text-green-200"; case "DELAYED": return "bg-red-100 text-red-800 dark:bg-red-900 dark:text-red-200"; default: return "bg-neutral-100 text-neutral-800 dark:bg-neutral-900 dark:text-neutral-200"; } }; const flightInfo = { flightNumber: flight.flight.iata, status: mapStatus(flight.flight_status), departure: { airport: flight.departure.airport, code: flight.departure.iata, time: formatTime(flight.departure.scheduled), date: formatDate(flight.departure.scheduled), terminal: flight.departure.terminal || undefined, gate: flight.departure.gate || undefined }, arrival: { airport: flight.arrival.airport, code: flight.arrival.iata, time: formatTime(flight.arrival.scheduled), date: formatDate(flight.arrival.scheduled), terminal: flight.arrival.terminal || undefined, gate: flight.arrival.gate || undefined }, duration: flight.flight.duration ? `${flight.flight.duration} minutes` : 'N/A', lastUpdated: new Date().toLocaleTimeString('en-US', { hour: '2-digit', minute: '2-digit', second: '2-digit', hour12: true }) }; return (

{flightInfo.flightNumber}

{flightInfo.status}
{flightInfo.departure.code}
{flightInfo.arrival.code}

{flightInfo.departure.airport}

{flightInfo.departure.time}

{flightInfo.departure.date}

{(flightInfo.departure.terminal || flightInfo.departure.gate) && (
{flightInfo.departure.terminal && (
Terminal {flightInfo.departure.terminal}
)} {flightInfo.departure.gate && (
Gate {flightInfo.departure.gate}
)}
)}

{flightInfo.arrival.airport}

{flightInfo.arrival.time}

{flightInfo.arrival.date}

{(flightInfo.arrival.terminal || flightInfo.arrival.gate) && (
{flightInfo.arrival.terminal && (
Terminal {flightInfo.arrival.terminal}
)} {flightInfo.arrival.gate && (
Gate {flightInfo.arrival.gate}
)}
)}
Duration: {flightInfo.duration} Last updated: {flightInfo.lastUpdated}
); }