# Coaster World v1.73.1 — Live quasi temps réel

## Objectif

Rendre les temps d’attente et l’état d’ouverture des parcs aussi frais que possible avec la source actuelle, sans dépasser la cadence recommandée par ThemeParks.wiki.

## Nouveautés

- Rafraîchissement navigateur ramené de 60 s à **30 s** sur les fiches parc et le Mode Visite.
- L’API Live Coaster World vérifie désormais automatiquement si un parc doit être resynchronisé.
- Si la dernière fenêtre de polling est dépassée, la première requête du parc peut déclencher une **synchronisation ThemeParks.wiki immédiate**.
- Verrou local par parc pour empêcher plusieurs visiteurs de lancer la même synchronisation simultanément.
- Backoff après erreur via `next_poll_at` afin de ne pas marteler la source si elle est indisponible.
- Réponse `/api/v1/parks/{park}/live` explicitement non mise en cache par le navigateur/proxy.
- La fraîcheur affichée privilégie maintenant `source_observed_at` plutôt que la seule date de téléchargement Coaster World.
- Le bandeau Live affiche l’âge de la dernière observation réelle de la source lorsqu’elle existe.

## Ouverture / fermeture des parcs

- Nouveau calcul dynamique de l’état du parc à partir des horaires du jour et du fuseau horaire du parc.
- États : **Ouvert maintenant**, **Ouverture prévue**, **Fermé maintenant**, **Statut à confirmer**.
- Le changement ouverture/fermeture est recalculé à chaque réponse Live ; l’écran peut donc basculer dans les ~30 s sans rechargement de page.
- Une attraction fraîche indiquée comme ouverte peut confirmer que le parc est encore ouvert lors d’une prolongation d’horaires.
- Support des journées explicitement `CLOSED` dans le schedule ThemeParks.wiki.
- Nettoyage des anciens blocs horaires ThemeParks devenus obsolètes lorsqu’un planning change.
- Les horaires ThemeParks sont revérifiés au maximum toutes les **15 minutes** pour les parcs actifs/consultés.

## Scheduler optimisé

- Le scheduler continue de récupérer les données Live toutes les **5 minutes**.
- La tâche automatique utilise maintenant `cw:live:sync --all --active` afin de concentrer les appels sur les parcs ouverts, bientôt ouverts ou sans horaire fiable.
- Les parcs fermés restent synchronisables à la demande dès qu’un utilisateur les consulte.
- Ajout d’un heartbeat Laravel toutes les minutes pour savoir si le scheduler Windows fonctionne réellement.

## Administration

- Nouveau bloc **Supervision Live** dans le tableau de bord administrateur.
- État du scheduler : actif / en retard / arrêté / non détecté.
- Nombre de parcs liés au Live.
- Nombre de parcs synchronisés depuis moins de 7 minutes.
- Nombre de parcs à resynchroniser.
- Nombre d’échecs récents.
- Dernière synchronisation réussie.

## Windows / Laragon

Deux outils sont ajoutés :

- `tools/run_scheduler_windows.bat`
- `tools/install_scheduler_windows.bat`

Le second crée une tâche Windows `Coaster World Laravel Scheduler` exécutée toutes les minutes sous `SYSTEM`, afin que `php artisan schedule:run` fonctionne même sans console ouverte.

## Base de données

Aucune nouvelle migration SQL.
