<?php
require_once 'config.php';

class Auth {
    public static function check() {
        return isset($_SESSION['user_id']);
    }
    
    public static function login($username, $password) {
        $config = Config::load();
        $users = $config['users'];
        
        foreach ($users as $user) {
            if ($user['id'] === $username && password_verify($password, $user['password'])) {
                $_SESSION['user_id'] = $user['id'];
                return true;
            }
        }
        return false;
    }
    
    public static function logout() {
        unset($_SESSION['user_id']);
        session_destroy();
    }

    public static function verifyCurrentPassword($password) {
        $config = Config::load();
        $userId = $_SESSION['user_id'];
        
        foreach ($config['users'] as $user) {
            if ($user['id'] === $userId) {
                return password_verify($password, $user['password']);
            }
        }
        return false;
    }
    
    /**
     * Vérifie si l'utilisateur actuel est l'administrateur principal
     * (premier utilisateur dans la liste)
     */
    public static function isAdmin() {
        if (!self::check()) {
            return false;
        }
        
        $config = Config::load();
        $firstUser = reset($config['users']);
        
        return $_SESSION['user_id'] === $firstUser['id'];
    }
    
    /**
     * Vérifie si l'utilisateur a le rôle "admin"
     */
    public static function hasAdminRole() {
        if (!self::check()) {
            return false;
        }
        
        $config = Config::load();
        $userId = $_SESSION['user_id'];
        
        foreach ($config['users'] as $user) {
            if ($user['id'] === $userId) {
                return isset($user['role']) && $user['role'] === 'admin';
            }
        }
        
        return false;
    }
    
    /**
     * Vérifie si l'utilisateur actuel a accès à un roman
     */
    public static function canAccessStory($storyId) {
        if (!self::check()) {
            return false;
        }
        
        $userId = $_SESSION['user_id'];
        $config = Config::load();
        
        // L'administrateur principal a accès à tous les romans
        if ($userId === reset($config['users'])['id']) {
            return true;
        }
        
        // Vérifier l'accès dans les paramètres du roman
        $story = Stories::get($storyId);
        if (!$story) {
            return false;
        }
        
        // Si aucune restriction d'accès n'est définie, tous les utilisateurs ont accès
        if (!isset($story['access']) || empty($story['access'])) {
            return true;
        }
        
        // Sinon, vérifier si l'utilisateur est dans la liste d'accès
        return in_array($userId, $story['access']);
    }
    
    /**
     * Récupère le rôle de l'utilisateur actuel
     */
    public static function getCurrentUserRole() {
        if (!self::check()) {
            return null;
        }
        
        $config = Config::load();
        $userId = $_SESSION['user_id'];
        
        foreach ($config['users'] as $user) {
            if ($user['id'] === $userId) {
                return $user['role'] ?? 'editor';
            }
        }
        
        return 'editor';
    }
    
    /**
     * Récupère la liste des utilisateurs (sauf l'utilisateur courant)
     */
    public static function getAllUsers($excludeCurrentUser = true) {
        $config = Config::load();
        $users = [];
        
        foreach ($config['users'] as $user) {
            if (!$excludeCurrentUser || $user['id'] !== ($_SESSION['user_id'] ?? null)) {
                $users[] = [
                    'id' => $user['id'],
                    'role' => $user['role'] ?? 'editor',
                    'isAdmin' => $user === reset($config['users'])
                ];
            }
        }
        
        return $users;
    }
}