<?php
/**
 * Sistema de Autenticación SSOMA
 * Protege las páginas del sistema y gestiona sesiones
 */

// Iniciar sesión si no está iniciada
if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once __DIR__ . '/../config/database.php';

class Auth {
    private $pdo;

    public function __construct() {
        $this->pdo = getDB();
    }

    /**
     * Verificar si el usuario está autenticado
     */
    public static function check() {
        return isset($_SESSION['user_id']) && isset($_SESSION['username']);
    }

    /**
     * Obtener ID del usuario actual
     */
    public static function userId() {
        return $_SESSION['user_id'] ?? null;
    }

    /**
     * Obtener username del usuario actual
     */
    public static function username() {
        return $_SESSION['username'] ?? null;
    }

    /**
     * Obtener nombre completo del usuario actual
     */
    public static function nombre() {
        return $_SESSION['nombre_completo'] ?? 'Usuario';
    }

    /**
     * Obtener rol del usuario actual
     */
    public static function rol() {
        return $_SESSION['rol'] ?? 'usuario';
    }

    /**
     * Verificar si el usuario es admin
     */
    public static function isAdmin() {
        return self::rol() === 'admin';
    }

    /**
     * Intentar login
     */
    public function login($username, $password) {
        try {
            $stmt = $this->pdo->prepare("
                SELECT id, username, password
                FROM usuarios
                WHERE username = ?
            ");
            $stmt->execute([$username]);
            $user = $stmt->fetch();

            if (!$user) {
                return ['success' => false, 'message' => 'Usuario o contraseña incorrectos'];
            }

            // Verificar contraseña
            if (!password_verify($password, $user['password'])) {
                return ['success' => false, 'message' => 'Usuario o contraseña incorrectos'];
            }

            // Crear sesión
            $_SESSION['user_id'] = $user['id'];
            $_SESSION['username'] = $user['username'];
            $_SESSION['nombre_completo'] = $user['username']; // Usar username como nombre
            $_SESSION['rol'] = ($user['id'] == 1) ? 'admin' : 'usuario'; // ID 1 es admin
            $_SESSION['login_time'] = time();

            return ['success' => true, 'message' => 'Login exitoso'];

        } catch (PDOException $e) {
            error_log("Error en login: " . $e->getMessage());
            return ['success' => false, 'message' => 'Error en el sistema: ' . $e->getMessage()];
        }
    }

    /**
     * Cerrar sesión
     */
    public static function logout() {
        $_SESSION = [];

        if (isset($_COOKIE[session_name()])) {
            setcookie(session_name(), '', time() - 3600, '/');
        }

        session_destroy();
    }

    /**
     * Requiere autenticación - Redirige al login si no está autenticado
     */
    public static function requireAuth() {
        if (!self::check()) {
            header('Location: /ssoma/login.php');
            exit;
        }
    }

    /**
     * Requiere rol admin
     */
    public static function requireAdmin() {
        self::requireAuth();
        if (!self::isAdmin()) {
            header('Location: /ssoma/dashboard/index.php?error=No tienes permisos para acceder a esta página');
            exit;
        }
    }
}

/**
 * Helper functions globales
 */
function auth() {
    return new Auth();
}

function checkAuth() {
    return Auth::check();
}

function requireAuth() {
    Auth::requireAuth();
}

function requireAdmin() {
    Auth::requireAdmin();
}
?>
