<?php

declare(strict_types=1);

// Inicialización central para todos los módulos del panel administrativo.
// IMPORTANTE: config.php inicia la sesión segura con SESSION_NAME.
// No debe ejecutarse session_start() antes, porque abriría PHPSESSID y
// separaría la sesión del Login de la sesión utilizada dentro de /admin.
require_once __DIR__ . '/../config.php';

if (session_status() !== PHP_SESSION_ACTIVE) {
    if (class_exists('Security')) {
        Security::startSession(defined('SESSION_NAME') ? SESSION_NAME : null);
    } else {
        session_start();
    }
}
require_once __DIR__ . '/../config_ui.php';
require_once __DIR__ . '/funciones.php';
require_once __DIR__ . '/verificar_admin.php';

$afenixxCurrentAdminPage = basename((string) ($_SERVER['PHP_SELF'] ?? 'index.php'));
$afenixxRole = mb_strtolower(trim((string) ($_SESSION['admin']['rol'] ?? '')), 'UTF-8');
$afenixxSubscription = (array) ($_SESSION['admin']['subscription_status'] ?? []);
$afenixxSubscriptionLocked = in_array($afenixxRole, ['admin', 'ayudante de superadmin'], true)
    && !(bool) ($afenixxSubscription['operational'] ?? false);

define('AFENIXX_SUBSCRIPTION_LOCKED', $afenixxSubscriptionLocked);
define('AFENIXX_SUBSCRIPTION_OPERATIONAL', !$afenixxSubscriptionLocked);

// Un Admin vencido puede iniciar sesión, revisar el panel, consultar su saldo,
// renovar su cuenta o un referido y leer el manual. No puede administrar recursos.
if ($afenixxSubscriptionLocked) {
    $allowedWhileExpired = [
        'index.php',
        'mi_suscripcion.php',
        'mis_referidos.php',
        'manual_de_uso.php',
    ];

    if (!in_array($afenixxCurrentAdminPage, $allowedWhileExpired, true)) {
        $isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH'])
            && strtolower((string) $_SERVER['HTTP_X_REQUESTED_WITH']) === 'xmlhttprequest';
        $isMutation = strtoupper((string) ($_SERVER['REQUEST_METHOD'] ?? 'GET')) !== 'GET';
        $expectsJson = $isAjax
            || $isMutation
            || isset($_REQUEST['action'])
            || isset($_GET['fetch_data'])
            || str_contains(strtolower((string) ($_SERVER['HTTP_ACCEPT'] ?? '')), 'application/json');

        $message = 'Tu suscripción está vencida. Renueva con tu saldo para volver a administrar buzones, dominios, clientes y cuentas.';
        if ($expectsJson) {
            header('Content-Type: application/json; charset=utf-8');
            http_response_code(423);
            echo json_encode([
                'success' => false,
                'code' => 'SUBSCRIPTION_EXPIRED',
                'message' => $message,
                'renewal_url' => 'mi_suscripcion.php',
            ], JSON_UNESCAPED_UNICODE);
            exit;
        }

        header('Location: mi_suscripcion.php?estado=vencido&desde=' . rawurlencode($afenixxCurrentAdminPage));
        exit;
    }
}
