# 🎮 Dashboard Tournois Esports - v2.1

Application complète de gestion de tournois esports avec base de données MySQL et API PHP.

## 🆕 Version 2.1 - Correctif Important

**Fix ENUM Status** : Résolution du problème `SQLSTATE(01000): Data truncated for column 'status'`

Les statuts ont été simplifiés pour éviter les problèmes avec les caractères spéciaux :
- ✅ `en_lice` (au lieu de "En lice")
- ✅ `elimine` (au lieu de "Éliminé")  
- ✅ `attente` (au lieu de "Liste d'attente")

➡️ **[Guide de correction rapide](QUICKFIX_STATUS.txt)** (3 minutes)

---

## 📋 Prérequis

- **XAMPP** / **WAMP** / **MAMP** (Apache + MySQL + PHP)
- PHP 7.4 ou supérieur
- MySQL 5.7 ou supérieur
- Navigateur web moderne

---

## 🚀 Installation Rapide

### Option A : Installation avec le fix (RECOMMANDÉ)

```bash
# 1. Créer la base
phpMyAdmin → Nouveau → tournament_db

# 2. Exécuter les scripts dans cet ordre :
database/tournament_db.sql              # Base + données de test
database/migration_features_avancees.sql # Fonctionnalités v2
database/FIX_ENUM_STATUS.sql            # ⭐ CORRECTIF STATUS

# 3. Vérifier
database/VERIFICATION_POST_FIX.sql      # Doit retourner ✅
```

### Option B : Installation complète depuis zéro

```bash
# 1. Base de données
database/tournament_db.sql              # Création base
database/FIX_ENUM_STATUS.sql            # Directement le fix

# 2. Configuration
backend/config/database.php             # Vérifier les identifiants

# 3. Tester
frontend/test-status-fix.html           # Page de test
frontend/login.html                     # Interface principale
```

---

## 📁 Structure du Projet

```
tournament-project/
├── 📂 database/
│   ├── tournament_db.sql                   # Base de données principale
│   ├── migration_features_avancees.sql     # Fonctionnalités v2.0
│   ├── FIX_ENUM_STATUS.sql                 # ⭐ Correctif status v2.1
│   ├── VERIFICATION_POST_FIX.sql           # Script de vérification
│   └── ... (autres scripts SQL)
│
├── 📂 backend/
│   ├── 📂 api/
│   │   ├── index.php                       # Routeur API principal
│   │   ├── Auth.php                        # Authentification
│   │   ├── Tournament.php                  # Gestion tournois
│   │   ├── Participant.php                 # ✅ Gestion participants (fixé)
│   │   └── Pool.php                        # Gestion poules
│   │
│   ├── 📂 classes/
│   │   ├── Auth.php
│   │   ├── Tournament.php
│   │   ├── Participant.php                 # ✅ Logique métier (fixé)
│   │   └── Pool.php
│   │
│   └── 📂 config/
│       └── database.php                    # Configuration BDD
│
├── 📂 frontend/
│   ├── login.html                          # Page de connexion
│   ├── tournament-dashboard-v2.html        # Interface principale
│   ├── status-translator.js                # 🆕 Helper traduction statuts
│   └── test-status-fix.html                # 🆕 Page de test
│
├── 📄 README.md                             # ⬅ Vous êtes ici
├── 📄 QUICKFIX_STATUS.txt                   # Guide rapide 3 min
├── 📄 GUIDE_FIX_STATUS_ENUM.md             # Documentation complète
└── 📄 RESUME_CORRECTION_STATUS.md          # Résumé des changements
```

---

## 🎯 Fonctionnalités

### ✅ Version 2.1 (Actuelle)
- 🔧 **Correction ENUM Status** (plus d'erreurs lors des changements de statut)
- 📊 Helper JavaScript pour traduction automatique des statuts
- 🧪 Page de test dédiée
- 📖 Documentation complète du correctif

### ✅ Version 2.0
- 🔐 Système d'authentification (Admin / Opérateur)
- 📊 Statistiques en temps réel
- 📈 Graphiques interactifs
- 👥 Gestion complète des participants (prenom, nom, age, téléphone)
- ⏱️ **File d'attente automatique** (quand tournoi complet)
- 🚀 **Promotion automatique** (si place se libère)
- 🎲 Génération de poules aléatoires
- 📝 Historique et logs d'activité

### ✅ Version 1.0 (Base)
- 4 tournois pré-configurés (Fortnite, Mario Kart, Smash Bros, FC 26)
- Inscription de participants
- Gestion des statuts
- Création de poules

---

## 🔑 Comptes par défaut

```
Admin :
  Username : admin
  Password : Admin123!

Opérateur :
  Username : operateur
  Password : Oper123!
```

⚠️ **Changez ces mots de passe en production !**

---

## 🎨 Utilisation

### Pour les utilisateurs

1. **Connexion**
   ```
   http://localhost/tournament-project/frontend/login.html
   ```

2. **Inscrire un participant**
   - Cliquer sur un tournoi
   - Remplir : Prénom, Nom, Âge, Téléphone
   - Cliquer "Inscrire"
   - Si tournoi plein → Liste d'attente automatique ✨

3. **Changer un statut**
   - Utiliser le menu déroulant à côté du participant
   - Statuts disponibles : En lice / Éliminé / Liste d'attente
   - ✅ Plus d'erreur SQLSTATE depuis v2.1 !

4. **Créer des poules**
   - Minimum 4 joueurs "En lice" requis
   - Cliquer "Créer Poules"
   - Répartition automatique et aléatoire

### Pour les développeurs

#### Nouveaux statuts (v2.1)

```javascript
// ✅ DANS LA BASE DE DONNÉES
'en_lice'   // Participant actif dans le tournoi
'elimine'   // Participant éliminé
'attente'   // Participant en liste d'attente

// ✅ AFFICHAGE À L'UTILISATEUR
StatusTranslator.toDisplay['en_lice']  // → "En lice"
StatusTranslator.toDisplay['elimine']  // → "Éliminé"
StatusTranslator.toDisplay['attente']  // → "Liste d'attente"
```

#### Utilisation du StatusTranslator

```javascript
// 1. Inclure le script
<script src="status-translator.js"></script>

// 2. Afficher un statut
const statusDB = 'en_lice';
const statusAffiche = StatusTranslator.toDisplay[statusDB]; // "En lice"
const icon = StatusTranslator.getIcon(statusDB);            // "✓"
const css = StatusTranslator.getCssClass(statusDB);         // "bg-green-100..."

// 3. Convertir pour l'API
const statusUtilisateur = "Liste d'attente";
const statusPourAPI = StatusTranslator.toDb[statusUtilisateur]; // "attente"
```

---

## 📊 API Endpoints

```
GET    /tournaments                  Liste tous les tournois
GET    /tournaments/{id}             Détails d'un tournoi
GET    /participants?tournament_id=  Liste des participants
POST   /participants                 Ajouter un participant
PUT    /participants                 Modifier le statut (✅ fixé v2.1)
DELETE /participants                 Supprimer un participant
GET    /pools?tournament_id=         Liste des poules
POST   /pools                        Créer des poules
GET    /stats                        Statistiques (admin)
```

---

## 🔧 Configuration

### Base de données

```php
// backend/config/database.php
private $host = 'localhost';
private $db_name = 'tournament_db';
private $username = 'root';
private $password = '';  // Vide par défaut sur XAMPP
```

### API URL (Frontend)

```javascript
// Dans vos fichiers HTML
const API_BASE_URL = 'http://localhost/tournament-project/backend/api/index.php';

// Ou adaptez selon votre configuration
const API_BASE_URL = 'http://192.168.1.182/tournament-project/backend/api/index.php';
```

---

## 🐛 Résolution des Problèmes

### ❌ Erreur : "Data truncated for column 'status'"

**Solution :**
```bash
# Exécuter le correctif (si pas encore fait)
phpMyAdmin → SQL → database/FIX_ENUM_STATUS.sql

# Voir : QUICKFIX_STATUS.txt pour guide détaillé
```

### ❌ Les statuts s'affichent en "en_lice" au lieu de "En lice"

**Solution :**
```javascript
// Utiliser le traducteur
StatusTranslator.toDisplay[participant.status]

// Ou créer votre propre fonction
function traduireStatut(status) {
    const traductions = {
        'en_lice': 'En lice',
        'elimine': 'Éliminé',
        'attente': 'Liste d\'attente'
    };
    return traductions[status] || status;
}
```

### ❌ Erreur de connexion à la base de données

**Solutions :**
1. Vérifier que MySQL est démarré (XAMPP Control Panel)
2. Vérifier les paramètres dans `backend/config/database.php`
3. Vérifier que la base `tournament_db` existe

### ❌ API ne répond pas

**Solutions :**
1. Vérifier que Apache est démarré
2. Tester : `http://localhost/tournament-project/backend/api/index.php/tournaments`
3. Vérifier les logs : Console navigateur (F12) + Logs Apache

---

## 🧪 Tests

### Test rapide (2 minutes)

```bash
# 1. Tester la structure
phpMyAdmin → SQL → database/VERIFICATION_POST_FIX.sql
# Doit afficher : ✅ INSTALLATION RÉUSSIE !

# 2. Tester l'API
Navigateur → http://localhost/tournament-project/backend/api/index.php/stats
# Doit retourner du JSON

# 3. Tester le frontend
Navigateur → frontend/test-status-fix.html
# Tests 1, 2, 3 doivent être verts
```

### Test complet

1. Connexion : `frontend/login.html`
2. Inscrire un participant
3. Changer son statut (tester "Liste d'attente")
4. Créer des poules
5. Vérifier la promotion automatique (supprimer un "En lice")

---

## 📈 Migration depuis v2.0 vers v2.1

Si vous avez déjà la v2.0 installée :

```bash
# 1. Sauvegarder
phpMyAdmin → tournament_db → Exporter → SQL → Télécharger

# 2. Appliquer le fix
phpMyAdmin → SQL → Copier/coller : database/FIX_ENUM_STATUS.sql → Exécuter

# 3. Vérifier
phpMyAdmin → SQL → Copier/coller : database/VERIFICATION_POST_FIX.sql → Exécuter

# 4. Mettre à jour le frontend
Option A : Utiliser status-translator.js (recommandé)
Option B : Modifier les valeurs de statut dans votre code
```

---

## 🎓 Documentation

- 📄 **QUICKFIX_STATUS.txt** - Guide rapide 3 minutes
- 📖 **GUIDE_FIX_STATUS_ENUM.md** - Documentation complète avec exemples
- 📊 **RESUME_CORRECTION_STATUS.md** - Résumé des changements v2.1
- 🧪 **test-status-fix.html** - Page de test interactive

---

## 🛡️ Sécurité

- ✅ Sessions PHP sécurisées
- ✅ Mots de passe hashés (bcrypt)
- ✅ Protection SQL injection (Prepared Statements)
- ✅ Validation des données côté serveur
- ✅ Nettoyage des entrées utilisateur
- ✅ Headers CORS configurés

⚠️ **Pour la production :**
1. Changer tous les mots de passe par défaut
2. Configurer HTTPS
3. Limiter les accès phpMyAdmin
4. Activer les logs d'erreur
5. Sauvegardes automatiques

---

## 🚀 Améliorations Futures

### Court terme
- [ ] Export des participants en PDF
- [ ] QR codes pour inscription rapide
- [ ] Notifications par email
- [ ] Interface mobile responsive

### Moyen terme
- [ ] Application mobile native
- [ ] Système de paiement
- [ ] Brackets automatiques
- [ ] Gestion des scores en temps réel

### Long terme
- [ ] IA pour équilibrage des poules
- [ ] Streaming intégré
- [ ] API publique documentée
- [ ] Plugin Discord/Twitch

---

## 📞 Support

### En cas de problème

1. **Console navigateur** (F12) pour voir les erreurs JavaScript
2. **Logs Apache** : `/var/log/apache2/error.log`
3. **Logs PHP** : `xampp/apache/logs/error.log`
4. **Test API** : `backend/api/index.php/tournaments`
5. **Diagnostic** : `backend/diagnostic.php`

### Documentation

- Guide installation : `GUIDE_INSTALLATION_V2.md`
- Quick start : `QUICK_START.md`
- Fix status : `GUIDE_FIX_STATUS_ENUM.md`

---

## 📄 Licence

Projet libre pour usage éducatif et personnel.

---

## 🙏 Crédits

- **React.js** - Framework JavaScript
- **Recharts** - Graphiques
- **Tailwind CSS** - Styling
- **PHP & MySQL** - Backend

---

## 📊 Changelog

### v2.1 (Janvier 2026) - 🔧 Fix ENUM Status
- ✅ Correction erreur "Data truncated for status"
- ✅ Nouveaux statuts simplifiés (en_lice, elimine, attente)
- ✅ Helper JavaScript StatusTranslator
- ✅ Page de test dédiée
- ✅ Documentation complète du correctif
- ✅ Script de vérification post-installation

### v2.0 (Octobre 2024) - 🚀 Fonctionnalités Avancées
- ✅ Système d'authentification
- ✅ Gestion multi-utilisateurs (Admin + Opérateur)
- ✅ File d'attente automatique
- ✅ Promotion automatique
- ✅ Contrôle d'âge
- ✅ Logs d'activité

### v1.0 (2024) - 🎮 Version Initiale
- ✅ Gestion de tournois
- ✅ Inscription de participants
- ✅ Création de poules
- ✅ Dashboard avec statistiques

---

**Version actuelle** : 2.1  
**Status** : ✅ Production Ready  
**Dernière mise à jour** : Janvier 2026

🎮 **Bon tournoi !** 🏆
