import { BookOpenText, Languages, Settings } from "lucide-react"; import Link from "next/link"; import { useRouter } from "next/navigation"; import { ChangeEvent, useState } from "react"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@/components/ui/dialog"; import { BoardingMissionForm, startVoyage } from "@/features/boarding"; import { useI18n } from "@/features/i18n/model/useI18n"; import { useLobbyRedirect } from "@/features/lobby-session/model/useLobbyRedirect"; import { LOCALE_LABELS, Locale, SUPPORTED_LOCALES } from "@/shared/config/i18n"; import { ROUTES } from "@/shared/config/routes"; function RouteCard({ route, isCTA = false, onLaunch, }: { route: (typeof ROUTES)[number]; isCTA?: boolean; onLaunch: (route: (typeof ROUTES)[number]) => void; }) { const { t } = useI18n(); return (

{t(route.nameKey, undefined, route.id)}

{t(route.tagKey)}
{route.durationMinutes !== 0 && ( {route.durationMinutes !== 0 && route.durationMinutes} {route.durationMinutes !== 0 && t("common.minuteShort")} )}
{!isCTA && (

{t(route.descriptionKey)}

)} {isCTA && (

{t(route.descriptionKey)}

)}
); } export function LobbyRoutesPanel() { const { locale, setLocale, t } = useI18n(); useLobbyRedirect(); const router = useRouter(); const [selectedRouteId, setSelectedRouteId] = useState(null); const [isBoardingOpen, setIsBoardingOpen] = useState(false); const stationRoute = ROUTES[0]; const normalRoutes = ROUTES.slice(1); const selectedRoute = ROUTES.find((route) => route.id === selectedRouteId) ?? stationRoute; const handleOpenBoarding = (route: (typeof ROUTES)[number]) => { setSelectedRouteId(route.id); setIsBoardingOpen(true); }; const handleDocking = (mission: string) => { const started = startVoyage({ route: selectedRoute, mission, routeName: t(selectedRoute.nameKey, undefined, selectedRoute.id), }); if (!started) return; setIsBoardingOpen(false); router.push("/flight"); }; const handleLocaleChange = (event: ChangeEvent) => { setLocale(event.target.value as Locale); }; return (

{t("lobby.title")}

{t("lobby.subtitle")}

{normalRoutes.map((route) => ( ))}

{t("lobby.modal.boardingCheck")}

{t("lobby.modal.routeBoarding", { routeName: t(selectedRoute.nameKey, undefined, selectedRoute.id), })} {t("lobby.modal.description")}
setIsBoardingOpen(false)} autoFocus={true} compact={true} />
); }