# Guide de Configuration des Environnements - StayManager

**Version:** 1.0  
**Date:** Novembre 2025

---

## Vue d'ensemble

StayManager utilise un système de configuration à deux niveaux :
- **Développement** : Configuration par défaut dans `config/config.php` et `config/database.php`
- **Production** : Configuration séparée dans `config/config.production.php` et `config/database.production.php`

**IMPORTANT** : Ne remplacez **JAMAIS** les fichiers existants. Utilisez les fichiers séparés pour la production.

---

## Comment ça fonctionne ?

### Détection Automatique de l'Environnement

Les fichiers `config/config.php` et `config/database.php` détectent automatiquement l'environnement :

1. **Développement** (par défaut) : Utilise la configuration locale
2. **Production** : Si `APP_ENV=production` est défini ET que les fichiers `.production.php` existent, les utilise

### Fichiers de Configuration

```
config/
├── config.php                    # Configuration de développement (NE PAS MODIFIER pour la prod)
├── config.production.php         # Configuration de production (à créer)
├── database.php                  # Base de données de développement (NE PAS MODIFIER pour la prod)
└── database.production.php       # Base de données de production (à créer)
```

---

## Configuration pour le Développement (Local)

### Fichiers Utilisés
- `config/config.php` - Configuration par défaut
- `config/database.php` - Base de données locale

### Paramètres par Défaut
```php
// config/database.php
private $host = 'localhost';
private $db_name = 'staymanager_db';
private $username = 'root';
private $password = '';

// config/config.php
define('APP_URL', 'http://localhost:81/StayManager');
define('DEBUG_MODE', true);
define('DISPLAY_ERRORS', true);
```

**Ces fichiers restent inchangés pour votre développement local.**

---

## Configuration pour la Production

### Étape 1 : Créer les Fichiers de Production

1. **Copiez les fichiers d'exemple** :
   ```bash
   cp config/database.production.php.example config/database.production.php
   cp config/config.production.php.example config/config.production.php
   ```

2. **Modifiez les paramètres** dans les nouveaux fichiers :

   **`config/database.production.php`** :
   ```php
   private $host = 'votre_serveur_mysql'; // Ex: mysql.example.com
   private $db_name = 'votre_nom_base_de_donnees'; // Ex: staymanager_prod
   private $username = 'votre_utilisateur_mysql'; // Ex: staymanager_user
   private $password = 'votre_mot_de_passe_fort'; // Mot de passe fort
   ```

   **`config/config.production.php`** :
   ```php
   define('APP_URL', 'https://votre-domaine.com'); // URL de production
   define('DEBUG_MODE', false); // Toujours false en production
   define('DISPLAY_ERRORS', false); // Toujours false en production
   define('JWT_SECRET', 'GENERER_UNE_CLE_SECRETE_FORTE_ET_UNIQUE'); // À changer !
   ```

### Étape 2 : Définir l'Environnement de Production

Vous avez **3 options** pour définir l'environnement de production :

#### Option 1 : Via .htaccess (Recommandé pour Apache)

Ajoutez dans votre fichier `.htaccess` à la racine :

```apache
# Définir l'environnement de production
SetEnv APP_ENV production
```

#### Option 2 : Via la Configuration du Serveur Web

**Apache** : Dans votre configuration virtuelle ou `.htaccess` :
```apache
SetEnv APP_ENV production
```

**Nginx** : Dans votre configuration de serveur :
```nginx
fastcgi_param APP_ENV production;
```

#### Option 3 : Via Variables d'Environnement du Serveur

Définissez la variable d'environnement `APP_ENV=production` dans votre serveur (cPanel, Plesk, etc.)

### Étape 3 : Vérifier que ça Fonctionne

1. **En développement** (local) :
   - Les fichiers `.production.php` n'existent pas ou `APP_ENV` n'est pas défini
   - L'application utilise `config.php` et `database.php` (configuration locale)

2. **En production** :
   - `APP_ENV=production` est défini
   - Les fichiers `.production.php` existent
   - L'application utilise `config.production.php` et `database.production.php`

---

## Exemple de Configuration Complète

### Développement (Local)

**Structure des fichiers** :
```
config/
├── config.php              ✅ Existe (configuration locale)
├── database.php            ✅ Existe (base de données locale)
├── config.production.php   ❌ N'existe pas (ou ignoré)
└── database.production.php ❌ N'existe pas (ou ignoré)
```

**Résultat** : Utilise la configuration locale (`localhost`, `root`, etc.)

### Production (Serveur)

**Structure des fichiers** :
```
config/
├── config.php              ✅ Existe (mais ignoré en production)
├── database.php            ✅ Existe (mais ignoré en production)
├── config.production.php   ✅ Existe (utilisé en production)
└── database.production.php ✅ Existe (utilisé en production)
```

**Résultat** : Utilise la configuration de production (serveur distant, utilisateur MySQL de production, etc.)

---

## Sécurité

### ⚠️ IMPORTANT : Ne Commitez JAMAIS les Fichiers de Production

Ajoutez dans votre `.gitignore` :

```
# Fichiers de configuration de production (contiennent des informations sensibles)
config/database.production.php
config/config.production.php
```

### Protection des Fichiers de Production

Assurez-vous que les fichiers `.production.php` ne sont pas accessibles via le web :

**Dans `.htaccess`** :
```apache
# Protéger les fichiers de configuration de production
<FilesMatch "^(database|config)\.production\.php$">
    Order allow,deny
    Deny from all
</FilesMatch>
```

**Dans Nginx** :
```nginx
location ~ ^/(config|database)\.production\.php$ {
    deny all;
}
```

---

## Dépannage

### L'application utilise toujours la configuration de développement

**Vérifiez** :
1. ✅ `APP_ENV=production` est bien défini (vérifiez dans `.htaccess` ou la config du serveur)
2. ✅ Les fichiers `.production.php` existent bien
3. ✅ Les fichiers `.production.php` sont bien dans le dossier `config/`
4. ✅ Les permissions des fichiers sont correctes (644)

### Erreur "Fichier non trouvé"

**Vérifiez** :
1. ✅ Les fichiers `.production.php` existent
2. ✅ Les chemins sont corrects
3. ✅ Les permissions sont correctes

### L'application ne se connecte pas à la base de données

**Vérifiez** :
1. ✅ Les paramètres dans `database.production.php` sont corrects
2. ✅ L'utilisateur MySQL a les bonnes permissions
3. ✅ Le serveur MySQL est accessible depuis votre hébergeur
4. ✅ Le firewall autorise les connexions MySQL

---

## Résumé

### ✅ À FAIRE

1. **Créer** les fichiers `config.production.php` et `database.production.php` à partir des exemples
2. **Modifier** les paramètres dans les fichiers `.production.php` avec vos informations de production
3. **Définir** `APP_ENV=production` sur votre serveur de production
4. **Protéger** les fichiers `.production.php` via `.htaccess` ou Nginx
5. **Ajouter** les fichiers `.production.php` dans `.gitignore`

### ❌ À NE PAS FAIRE

1. ❌ **Ne remplacez PAS** `config.php` et `database.php` par les fichiers de production
2. ❌ **Ne modifiez PAS** `config.php` et `database.php` pour la production
3. ❌ **Ne commitez PAS** les fichiers `.production.php` dans Git
4. ❌ **Ne supprimez PAS** les fichiers de développement

---

## Support

Pour toute question ou problème :
- Consultez les logs : `logs/error_*.log`
- Vérifiez la configuration de votre serveur
- Contactez votre hébergeur si nécessaire

---

**Document généré automatiquement**  
**StayManager v1.0**  
**Novembre 2025**


