# ODETOOL — Configuration de l'environnement optimal

## Vue d'ensemble
ODETOOL est une application PHP/MySQL avec interface web. Pour un développement performant et sans régressions, il faut une configuration stable et reproductible.

---

## 1. Stack technique requis

### Serveur
- **MAMP** (Apache + MySQL + PHP)
- **Port Apache** : 8081 (ou votre port MAMP)
- **Port MySQL** : 8889
- **PHP** : 8.0+
- **MySQL** : 5.7 ou 8.0

### Code
- **Éditeur** : VS Code
- **Workspace** : `/Applications/MAMP/htdocs/odetool`
- **Agent de debug** : GitHub Copilot / Chat standard

### Navigation
- **Browser** : n'importe quel navigateur moderne
- **URL de dev** : `http://127.0.0.1:8081/Page-ODETOOL.php`

---

## 2. Configuration VS Code minimale

### Extensions recommandées
```
- PHP Intelephense (felixbecker.php-intellisense)
- PHP Debug (felixbecker.php-debug)
- MySQL (cweijan.vscode-mysql-client2)
```

### Settings.json (User)
```json
{
  "[php]": {
    "editor.defaultFormatter": "felixbecker.php-intellisense",
    "editor.formatOnSave": false
  },
  "php.validate.executablePath": "/Applications/MAMP/bin/php/php8.3/bin/php",
  "php.validate.run": "onSave"
}
```

### Workspace (`.vscode/settings.json` dans le projet)
```json
{
  "search.exclude": {
    "**/node_modules": true,
    "**/saves/**": true,
    "**/data/**": true
  },
  "files.watcherExclude": {
    "**/saves/**": true,
    "**/data/**": true
  }
}
```

---

## 3. Configuration MAMP

### Démarrage
1. Ouvrir **MAMP**
2. Cliquer **Start Servers**
3. Vérifier :
   - Apache : **Running** (port 8081)
   - MySQL : **Running** (port 8889)

### Vérifier la connexion
```bash
php -r "echo 'PHP '.phpversion();" # doit afficher PHP 8.x
mysql -h 127.0.0.1 -u root -p -e "SELECT 1;" # mot de passe: root
```

---

## 4. Structure de la base de données

### Workspace principal
```
Database: odetool_debug_fix
Workspace ID: debug_fix
```

### Tables essentielles
- `chantiers` — projets/chantiers
- `tasks` — tâches liées aux chantiers
- `memos` — mémos/notes des chantiers
- `blocks` — blocs de la vue graphique
- `nomenclature` — modèles de nomenclature
- `workspace_settings` — config du workspace

### Vérifier les tables
```bash
mysql -h 127.0.0.1 -u root -p odetool_debug_fix -e "SHOW TABLES;"
```

---

## 5. Workflows de développement

### 5.1 Développement frontend
1. Modifier `Page-ODETOOL.php`, `Page-Chantier.php`, etc.
2. Rafraîchir le navigateur (`Cmd+R`)
3. Ouvrir Developer Tools (`F12`) pour voir console/network

### 5.2 Développement backend
1. Modifier `api/save.php`, `api/load.php`, etc.
2. Tester avec `curl` ou l'outil de test DB directement
3. Vérifier `php -l` pour la syntaxe
4. Relancer MAMP ou le serveur PHP si besoin

### 5.3 Tests de suppression en cascade
```bash
# Seed test data
php -r "
\$pdo = new PDO('mysql:host=127.0.0.1:8889;dbname=odetool_debug_fix', 'root', 'root');
\$pdo->exec(\"INSERT INTO chantiers (workspace, nom, description, block_id) VALUES ('debug_fix', 'TestCase', 'test', 999)\");
\$pdo->exec(\"INSERT INTO tasks (workspace, chantier_id, nom, description, status) VALUES ('debug_fix', 'TestCase', 'T1', 'd', 'planifiee')\");
echo 'Seeded';
"

# Appeler l'API de suppression
curl -X POST http://127.0.0.1:8081/api/save.php \
  -H 'Content-Type: application/json' \
  --data '{
    "workspace":"debug_fix",
    "type":"delete_chantier_cascade",
    "chantier_id":"TestCase",
    "chantier_names":["TestCase"],
    "block_id":999
  }'

# Vérifier suppression
php -r "
\$pdo = new PDO('mysql:host=127.0.0.1:8889;dbname=odetool_debug_fix', 'root', 'root');
\$c = \$pdo->query(\"SELECT COUNT(*) FROM chantiers WHERE workspace='debug_fix' AND nom='TestCase'\")->fetchColumn();
echo \"Chantiers: \" . \$c;
"
```

---

## 6. Points d'attention (pour éviter les régressions)

### ✅ À faire
- Tester chaque fonction d'export/import directement en SQL avant de déployer
- Valider la cascade de suppression avec des données réelles
- Commiter les changements au Git après chaque fonction validée
- Conserver une base de données de "référence" pour les tests

### ⚠️ À éviter
- Modifier `api/Config/database.php` sans savoir exactement quoi
- Changer les noms des clés JSON sans vérifier tous les usages frontend
- Ajouter des colonnes au modèle sans migrer les données existantes
- Tester seulement en navigateur sans vérifier les logs MySQL

### 🛡️ Sécurité minimale
- Ne jamais commiter les identifiants DB en dur (ils sont en `api/Config/database.php`)
- Utiliser des noms de workspace "propres" pour les tests (ex: `debug_fix`, `test_cascade`)
- Nettoyer les données de test après chaque session

---

## 7. Commandes utiles

### Démarrer le serveur PHP (alternatif à MAMP)
```bash
cd /Applications/MAMP/htdocs/odetool
php -S 127.0.0.1:8081
```

### Linter PHP
```bash
php -l api/save.php
php -l Page-ODETOOL.php
```

### Vérifier la syntaxe JSON des fichiers de config
```bash
php -r "json_decode(file_get_contents('saves/Antoine/Antoine-blocks.json'), true) ?: die('JSON error');"
```

### Sauvegarder la base
```bash
mysqldump -h 127.0.0.1 -u root -p odetool_debug_fix > /tmp/odetool_backup.sql
```

### Restaurer la base
```bash
mysql -h 127.0.0.1 -u root -p odetool_debug_fix < /tmp/odetool_backup.sql
```

---

## 8. Profil Copilot / Agent recommandé

### Mode optimal
- **Chat** standard (not "Vibe" ou mode custom)
- **Contexte workspace** : ouvert sur `/Applications/MAMP/htdocs/odetool`
- **Accès complet** aux fichiers PHP, JSON, et API
- **Exécution Terminal** : activée pour valider les changements en SQL/PHP

### Pourquoi "Chat" standard
- Plus précis pour les bugs PHP/SQL
- Meilleur tracking du contexte projet multi-fichier
- Validation directe en code plutôt que spéculation

---

## 9. Checklist avant de commencer une session

- [ ] MAMP démarré (Apache + MySQL running)
- [ ] VS Code ouvert sur `/Applications/MAMP/htdocs/odetool`
- [ ] Connexion à `http://127.0.0.1:8081/Page-ODETOOL.php` valide (404 c'est OK, 500 c'est un problème)
- [ ] Backup récent de la base de données (au moins une fois par jour)
- [ ] Terminal zsh actif et prêt pour les tests
- [ ] Mode Chat standard sélectionné

---

## 10. Troubleshooting rapide

| Problème | Solution |
|----------|----------|
| MAMP ne démarre pas | Redémarrer Mac, libérer ports 8081/8889 |
| PHP ne trouve pas MySQL | Vérifier port 8889, identifiants root/root |
| JSON corrompus en base | Restaurer depuis backup SQL |
| Suppression cascade ne marche pas | Vérifier les noms exact du chantier + block_id |
| 500 error sur save.php | `php -l api/save.php` + vérifier logs Apache |

---

## Conclusion

Le profil optimal pour ODETOOL :
- **Local** : Mac + MAMP + MySQL
- **Code** : VS Code sur workspace `/Applications/MAMP/htdocs/odetool`
- **Agent** : Copilot Chat standard
- **Validation** : directe en PHP + SQL + Browser

Cet environnement est reproductible, stable, et permet une validation rigoureuse avant chaque déploiement.
