<?php
/**
 * Configuration de PRODUCTION pour StayManager
 * 
 * INSTRUCTIONS :
 * 1. Copiez ce fichier vers config/config.production.php
 * 2. Modifiez les valeurs selon votre environnement de production
 * 3. Ne commitez JAMAIS ce fichier avec des informations sensibles dans Git
 */

// Inclure la configuration de session
require_once __DIR__ . "/session_config.php";

// Configuration de l'application
define('APP_NAME', 'HOTEL EDEN HAVRE');
define('APP_VERSION', '1.0.0');
define('APP_URL', 'https://votre-domaine.com'); // URL de production (HTTPS recommandé)
define('APP_ROOT', dirname(__DIR__));

// Configuration de la session
define('SESSION_NAME', 'staymanager_session');
define('SESSION_LIFETIME', 3600); // 1 heure

// Configuration de sécurité
define('JWT_SECRET', 'CHANGEZ_CECI_PAR_UNE_CLE_SECRETE_FORTE_ET_UNIQUE'); // À changer absolument !
define('CSRF_TOKEN_NAME', 'staymanager_csrf_token');

// Configuration des emails
define('SMTP_HOST', 'smtp.gmail.com'); // Ou votre serveur SMTP
define('SMTP_PORT', 587);
define('SMTP_USERNAME', 'votre_email@example.com');
define('SMTP_PASSWORD', 'votre_mot_de_passe_smtp');
define('SMTP_FROM_EMAIL', 'votre_email@example.com');
define('SMTP_FROM_NAME', 'StayManager');

// Configuration des uploads
define('UPLOAD_PATH', APP_ROOT . '/assets/uploads/');
define('MAX_FILE_SIZE', 5 * 1024 * 1024); // 5MB
define('ALLOWED_EXTENSIONS', ['jpg', 'jpeg', 'png', 'gif', 'pdf']);

// Configuration des logs
define('LOG_PATH', APP_ROOT . '/logs/');
define('LOG_LEVEL', 'ERROR'); // En production : ERROR uniquement

// Configuration des notifications
define('EMAIL_NOTIFICATIONS', true);
define('SMS_NOTIFICATIONS', false);

// Configuration des rapports
define('REPORTS_PATH', APP_ROOT . '/reports/');
define('EXPORT_FORMATS', ['pdf', 'excel', 'csv']);

// Configuration du cache
define('CACHE_ENABLED', true);
define('CACHE_PATH', APP_ROOT . '/cache/');
define('CACHE_LIFETIME', 3600); // 1 heure

// Configuration des timeouts
define('REQUEST_TIMEOUT', 30);
define('DB_TIMEOUT', 10);

// Configuration des paginations
define('ITEMS_PER_PAGE', 20);
define('MAX_PAGE_SIZE', 100);

// Configuration des devises
define('DEFAULT_CURRENCY', 'FCFA');
define('CURRENCY_SYMBOL', '₣');

// Configuration des taxes
define('DEFAULT_TAX_RATE', 18.5); // 18.5%

// Configuration des réservations
define('DEFAULT_CHECKIN_TIME', '14:00');
define('DEFAULT_CHECKOUT_TIME', '12:00');
define('RESERVATION_EXPIRY_HOURS', 24);

// Configuration des notifications push
define('PUSH_NOTIFICATIONS', true);
define('PUSH_PUBLIC_KEY', 'your-vapid-public-key');
define('PUSH_PRIVATE_KEY', 'your-vapid-private-key');

// Configuration des API
define('API_VERSION', 'v1');
define('API_RATE_LIMIT', 100); // requêtes par minute
define('API_KEY_HEADER', 'X-API-Key');

// Configuration des backups
define('BACKUP_ENABLED', true);
define('BACKUP_PATH', APP_ROOT . '/backups/');
define('BACKUP_RETENTION_DAYS', 30);

// Configuration du mode debug - IMPORTANT : DÉSACTIVÉ EN PRODUCTION
define('DEBUG_MODE', false); // Toujours false en production
define('DISPLAY_ERRORS', false); // Toujours false en production

// Configuration des timezones
date_default_timezone_set('Africa/Abidjan');

// Configuration des locales
setlocale(LC_ALL, 'fr_FR.UTF-8');

// Fonction pour obtenir la configuration
function getConfig($key, $default = null) {
    return defined($key) ? constant($key) : $default;
}

// Fonction pour vérifier si l'application est en mode debug
function isDebugMode() {
    return getConfig('DEBUG_MODE', false);
}

// Fonction pour obtenir l'URL de base
function getBaseUrl() {
    return getConfig('APP_URL', 'https://votre-domaine.com');
}

// Fonction pour obtenir le chemin racine
function getRootPath() {
    return getConfig('APP_ROOT', dirname(__DIR__));
}

// Fonction pour formater les montants
function formatCurrency($amount, $currency = null) {
    $currency = $currency ?: getConfig('DEFAULT_CURRENCY');
    $symbol = getConfig('CURRENCY_SYMBOL', '₣');
    return $symbol . ' ' . number_format($amount, 0, ',', ' ');
}

// Fonction pour valider les emails
function isValidEmail($email) {
    return filter_var($email, FILTER_VALIDATE_EMAIL) !== false;
}

// Fonction pour nettoyer les entrées
function sanitizeInput($input) {
    if (is_array($input)) {
        return array_map('sanitizeInput', $input);
    }
    return htmlspecialchars(strip_tags(trim($input)), ENT_QUOTES, 'UTF-8');
}

// Fonction pour logger les erreurs
function logError($message, $level = 'ERROR') {
    $logPath = getConfig('LOG_PATH', __DIR__ . '/../logs/');
    $logFile = $logPath . 'error_' . date('Y-m-d') . '.log';
    
    if (!is_dir($logPath)) {
        mkdir($logPath, 0755, true);
    }
    
    $timestamp = date('Y-m-d H:i:s');
    $logMessage = "[$timestamp] [$level] $message" . PHP_EOL;
    file_put_contents($logFile, $logMessage, FILE_APPEND);
}

// Fonction pour vérifier si l'utilisateur est connecté
function isLoggedIn() {
    return isset($_SESSION['user_id']) && !empty($_SESSION['user_id']);
}

// Fonction pour obtenir l'ID de l'utilisateur connecté
function getCurrentUserId() {
    return $_SESSION['user_id'] ?? null;
}

// Fonction pour rediriger
function redirect($url) {
    if (!headers_sent()) {
        header('Location: ' . $url);
        exit;
    } else {
        echo "<script>window.location.href = '$url';</script>";
        exit;
    }
}

// Fonction pour vérifier les permissions
function hasPermission($permission) {
    if (!isLoggedIn()) {
        return false;
    }
    
    // Vérifier d'abord les permissions de session (ancien système)
    $userPermissions = $_SESSION['user_permissions'] ?? [];
    
    // Si les permissions sont une chaîne JSON, les décoder
    if (is_string($userPermissions)) {
        $userPermissions = json_decode($userPermissions, true) ?? [];
    }
    
    if (in_array($permission, $userPermissions) || in_array('all', $userPermissions)) {
        return true;
    }
    
    // Vérifier les permissions du nouveau système de rôles
    if (function_exists('getCurrentUser')) {
        $user = getCurrentUser();
        if ($user) {
            // Vérifier si l'utilisateur a la permission "all"
            if (!empty($user['permissions'])) {
                // Si les permissions sont un objet avec "all": true
                if (is_array($user['permissions']) && isset($user['permissions']['all']) && $user['permissions']['all'] === true) {
                    return true;
                }
                
                // Si les permissions sont un array contenant "all"
                if (is_array($user['permissions']) && in_array('all', $user['permissions'])) {
                    return true;
                }
                
                // Vérifier la permission spécifique
                if (is_array($user['permissions']) && in_array($permission, $user['permissions'])) {
                    return true;
                }
            }
        }
    }
    
    return false;
}

// Fonction pour obtenir le rôle de l'utilisateur actuel
function getCurrentUserRole() {
    return $_SESSION['user_role'] ?? null;
}

// Fonction pour obtenir l'utilisateur actuel
function getCurrentUser() {
    if (!isLoggedIn()) {
        return null;
    }
    
    require_once __DIR__ . '/../models/User.php';
    $userModel = new User();
    $result = $userModel->getById(getCurrentUserId());
    return $result['success'] ? $result['user'] : null;
}

// Fonction pour formater les dates
function formatDate($date, $format = 'd/m/Y') {
    if (empty($date)) {
        return '';
    }
    return date($format, strtotime($date));
}

// Fonction pour formater les dates et heures
function formatDateTime($date, $format = 'd/m/Y H:i') {
    if (empty($date)) {
        return '';
    }
    return date($format, strtotime($date));
}
?>


