import React, { useEffect, useState } from 'react'; import WcsButton from '../components/WcsButton'; import { getSourceFromPath, getPlatformsForStation } from '../services/railwayService'; export default function SelectAfficheur({ onBack, navigate }) { const source = getSourceFromPath(window.location.pathname); const prefix = source === 'supabase' ? '/ferrovia' : ''; const params = new URLSearchParams(window.location.search || ''); const gareParam = params.get('gare') || ''; const modeParam = params.get('mode') || 'departs'; const typeParam = params.get('type') || 'afl'; const [platforms, setPlatforms] = useState([]); const [selectedPlatform, setSelectedPlatform] = useState(''); const [manualPlatform, setManualPlatform] = useState(''); const [loading, setLoading] = useState(true); // État des pages sélectionnées pour les afficheurs AFL const [aflPages, setAflPages] = useState({ horaires: true, infos: false, securite1: false, securite2: false, corresp: false }); // Options spécifiques pour les afficheurs Classiques const [extendedLines, setExtendedLines] = useState(0); // 0, 1, 2, 3 const [showTime, setShowTime] = useState(false); const toggleAflPage = (key) => { setAflPages(prev => ({ ...prev, [key]: !prev[key] })); }; const selectAllAflPages = (all) => { setAflPages({ horaires: true, infos: all, securite1: all, securite2: all, corresp: all }); }; // Decode and format station name for display const decodedGare = gareParam ? decodeURIComponent(String(gareParam).replace(/\+/g, ' ')).replace(/-/g, ' ') : ''; useEffect(() => { let mounted = true; async function loadPlatforms() { try { setLoading(true); const sortedPlatforms = await getPlatformsForStation(decodedGare || gareParam, source); if (!mounted) return; setPlatforms(sortedPlatforms || []); if (sortedPlatforms && sortedPlatforms.length > 0) { setSelectedPlatform(sortedPlatforms[0]); } } catch (err) { console.error('Error fetching platforms:', err); } finally { if (mounted) setLoading(false); } } loadPlatforms(); return () => { mounted = false; }; }, [gareParam, decodedGare, source]); const handleGeneral = () => { if (typeof navigate === 'function') { const kebab = gareParam ? String(gareParam).trim() : ''; let url = `${prefix}/afficheurs/${modeParam}/${typeParam}?gare=${encodeURIComponent(kebab)}`; if (typeParam === 'afl') { const activeKeys = Object.entries(aflPages) .filter(([_, active]) => active) .map(([key]) => key); if (activeKeys.length > 0) { url += `&pages=${activeKeys.join(',')}`; } } else if (typeParam === 'classiques') { if (extendedLines > 0) { url += `&extended=${extendedLines}`; } if (showTime) { url += `&time=true`; } } navigate(url); } }; const handlePlatform = () => { const quai = manualPlatform.trim() || selectedPlatform; if (!quai) { alert("Veuillez sélectionner ou saisir une voie."); return; } if (typeof navigate === 'function') { const kebab = gareParam ? String(gareParam).trim() : ''; let url = `${prefix}/afficheurs/${modeParam}/${typeParam}/quais?gare=${encodeURIComponent(kebab)}&quai=${encodeURIComponent(quai)}`; if (typeParam === 'classiques') { if (extendedLines > 0) { url += `&extended=${extendedLines}`; } if (showTime) { url += `&time=true`; } } navigate(url); } }; const handleSinglePage = (pageKey) => { if (typeof navigate === 'function') { const kebab = gareParam ? String(gareParam).trim() : ''; navigate(`${prefix}/afficheurs/${modeParam}/${typeParam}?gare=${encodeURIComponent(kebab)}&page=${pageKey}`); } }; return (
Gare : {decodedGare} • Mode : {modeParam === 'arrivees' ? '🏁 Arrivées' : '🚆 Départs'} • Style : {typeParam.toUpperCase()}
Affiche la liste complète des circulations avec basculement automatique des pages.
{typeParam === 'afl' && (Affiche le prochain train au départ/arrivée avec la liste déroulante des gares desservies sur la voie.
Écran dédié aux perturbations de circulation en temps réel et travaux de maintenance sur le réseau.
Écran d'annonces et consignes dynamiques de la gare (Vigipirate, étiquetage des bagages, sécurité en gare).