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) => (
))}
);
}