import { useState } from 'react' import { useNavigate } from 'react-router-dom' import { TopBar } from '../../ui/TopBar' import { IconButton } from '../../ui/IconButton' import { Button } from '../../ui/Button' import { SimulationControl, type SimulationState } from '../../ui/SimulationControl' import { MapActions } from '../../ui/MapActions' import { AlertDialog } from '../../ui/Modal' import { Sidebar } from '../scenario-creator/components/Sidebar' import { AreaMapView } from '../scenario-creator/components/AreaMapView' import { VesselPanel } from '../scenario-creator/components/VesselPanel' import { useScenarioStore } from '../scenario-creator/store' import { useSimulationStore } from '../../stores/simulationStore' import { useMapStore } from '../../stores/mapStore' import { tokens } from '../../theme/tokens' const API_BASE = import.meta.env.VITE_API_URL ?? 'http://localhost:3000' function pillState(status: string): SimulationState { if (status === 'running') return 'running' if (status === 'loading') return 'building' if (status === 'ready') return 'ready' return 'idle' } /** * Instructor workspace shell (Figma "Layout do instrutor"): a top bar over a * full-bleed map, with a floating Build/Play/Stop pill and a zoom control. The * scenario-setup sidebar and the per-vessel panel dock on top of the map. */ export function AppShell() { const { name, vessels, toCreateScenarioDTO } = useScenarioStore() const { status, start, stop, loadScenario } = useSimulationStore() const { zoomIn, zoomOut } = useMapStore() const [confirmNoOwnship, setConfirmNoOwnship] = useState(false) const navigate = useNavigate() async function saveScenario() { try { const res = await fetch(`${API_BASE}/scenarios`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(toCreateScenarioDTO()), }) if (!res.ok) console.error('Failed to save scenario:', res.status) } catch (err) { console.error('Network error saving scenario:', err) } } function handleSave() { if (vessels.length === 0) { setConfirmNoOwnship(true) return } void saveScenario() } function handleBuild() { void saveScenario() loadScenario(vessels) start() } const logo = (