<?php

if (session_status() === PHP_SESSION_NONE) {
    session_start();
}

require_once __DIR__ . '/../../config/db.php';
require_once __DIR__ . '/../../config/app.php';
require_once __DIR__ . '/helpers.php';

function require_login(): void {
    if (!isset($_SESSION['usuario_id'])) {
        redirect(app_url('login.php'));
    }
}

function empresa_id(): int {
    return (int)($_SESSION['empresa_id'] ?? 0);
}

function usuario_id(): int {
    return (int)($_SESSION['usuario_id'] ?? 0);
}

function is_master(): bool {
    return ($_SESSION['rol_codigo'] ?? '') === 'MASTER';
}

function require_empresa_activa(PDO $pdo): void {
    if (is_master()) {
        return;
    }

    $empresa_id = empresa_id();

    if ($empresa_id <= 0) {
        redirect(app_url('login.php'));
    }

    $stmt = $pdo->prepare("SELECT estado FROM empresas WHERE id = ? LIMIT 1");
    $stmt->execute([$empresa_id]);
    $estado = $stmt->fetchColumn();

    if ($estado !== 'ACTIVA') {
        http_response_code(403);
        die('Empresa inactiva');
    }
}

function can_module(PDO $pdo, string $codigo): bool {
    if (is_master()) {
        return true;
    }

    $stmt = $pdo->prepare(" 
        SELECT COUNT(*)
        FROM empresa_modulos em
        INNER JOIN modulos m ON m.id = em.modulo_id
        WHERE em.empresa_id = ?
          AND m.codigo = ?
          AND em.activo = 1
    ");

    $stmt->execute([
        empresa_id(),
        $codigo
    ]);

    return (int)$stmt->fetchColumn() > 0;
}
