# PHC Race Control — Documentation

## Structure des fichiers
```
phc-race-control/
├── index.html      ← Point d'entrée (ouvrir dans un navigateur)
├── style.css       ← Thème dark motorsport Noir & Or
└── app.js          ← Application React complète (CDN, pas de build)
```

## Comment ouvrir l'application

> **Ouvrir `index.html` directement dans Chrome ou Edge.**
> Babel transpile le JSX côté navigateur — aucun build requis.

---

## Modules implémentés

| Module | Description |
|--------|-------------|
| **A — Météo** | Température, condition de piste (Sec/Humide/Détrempé), vent, tendance |
| **B — Télémétrie** | 4 pneus, 4 freins, cardan, huile moteur/boîte, carburant. Mock auto-actualisé toutes les 1.5s |
| **C — Arrêts Stands** | Modal de saisie complet (pneus, pilotes, carburant, observations) + historique |
| **D — Stratégie Carburant** | Conso/tour, L/100km, tours restants avant panne |
| **E — Maintenance** | 6 composants avec barre de progression et alertes OK/BIENTÔT/URGENT |
| **F — Pit Box (TV)** | Vue `#pit-display` — polices géantes, pilotes, dernier arrêt, météo, alerte |
| **G — Pit Timer** | Compte à rebours "Safe Release" (T1+MinTime+T2), chrono intervention, checklist 8 tâches nominatives |

---

## Navigation

- **Dashboard** : Vue ingénieur complète (3 colonnes, widgets)
- **Pit Display** : Cliquer sur l'onglet "Pit Display" → URL `#pit-display` → mettre en plein écran sur la TV

## Boutons clés

| Bouton | Action |
|--------|--------|
| `▶ Start Course` | Démarre le chronomètre de course |
| `🚗 VOITURE EN PIT LANE` | Déclenche le compte à rebours légal Safe Release |
| `▶ START` (chrono) | Démarre le chrono d'intervention véhicule à l'arrêt |
| `+ Nouvel Arrêt` | Ouvre le modal de saisie pit stop |
| `⚠ Alerter Prochain` | Déclenche l'alerte clignotante sur la vue TV |

---

## Architecture WebSocket/MQTT (V2)

Le générateur de données `genTele()` dans `app.js` est l'unique point à remplacer pour brancher un vrai ESP32 :

```js
// Remplacer useInterval(()=>setState(p=>({...p, tele:genTele(p.tele)})), 1500)
// Par une connexion WebSocket :
const ws = new WebSocket('ws://votre-serveur:8883');
ws.onmessage = (e) => setState(p => ({...p, tele: JSON.parse(e.data)}));
```

Format JSON attendu de l'ESP32 :
```json
{
  "tires":  {"FL":85.2, "FR":88.1, "RL":95.4, "RR":92.0},
  "brakes": {"FL":380, "FR":420, "RL":280, "RR":310},
  "driveshaft": 75.3,
  "oilEng": 108.5,
  "oilGbx": 87.2,
  "fuelL": 44.8,
  "fuelCap": 60,
  "speed": 142,
  "lapTime": 145.3,
  "lapCount": 12
}
```
