<?php
// Forzar reporte de errores para depuración limpia
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

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

// Ruta exacta apuntando a tu archivo real Db.php
$ruta_db = "../../modelo/Db.php";

if (file_exists($ruta_db)) {
    include_once($ruta_db);
} else {
    $ruta_absoluta = $_SERVER['DOCUMENT_ROOT'] . '/stage/modelo/Db.php';
    if (file_exists($ruta_absoluta)) {
        include_once($ruta_absoluta);
    } else {
        header('Content-Type: application/json; charset=utf-8');
        http_response_code(500);
        echo json_encode(["error" => true, "message" => "Error crítico: No se encontró el archivo de conexión."]);
        exit();
    }
}

header('Content-Type: application/json; charset=utf-8');

if (!isset($_SESSION['usu_id'])) {
    http_response_code(401);
    echo json_encode(["error" => true, "message" => "Sesión caducada."]);
    exit();
}

try {
    $bd = new clsbdd();

    if (!isset($_GET['get_config_nivel'])) {
        http_response_code(400);
        echo json_encode(["error" => true, "message" => "Falta el parámetro 'get_config_nivel'."]);
        exit();
    }

    $nivel_solicitado = trim($_GET['get_config_nivel']);
    $id_usuario = intval($_SESSION['usu_id']);
    
    // 1. AUXILIO DE EMERGENCIA: Si la sesión no tiene el tipo de juez, lo consultamos directo a la BD
    $tipo_juez_evaluar = 'TODOS';
    
    // Ajusta los campos 'usu_tipo_juez' y 'bas_usuarios' / 'seg_usuarios' según el nombre real de tu tabla de usuarios
    $sql_user = "SELECT usu_tipo_juez FROM bas_usuarios WHERE usu_id = $id_usuario";
    $res_user = $bd->ejecutar_array($sql_user);
    
    if (!empty($res_user) && isset($res_user[0]['usu_tipo_juez'])) {
        $tipo_juez_evaluar = strtoupper(trim($res_user[0]['usu_tipo_juez']));
    } else {
        // Si no está en la tabla de usuarios, intentamos leer lo que envió el GET si es distinto de TODOS
        $param_get = strtoupper(trim($_GET['tipo_juez'] ?? ''));
        if ($param_get !== '' && $param_get !== 'TODOS') {
            $tipo_juez_evaluar = $param_get;
        } elseif (isset($_SESSION['usu_tipo_juez'])) {
            $tipo_juez_evaluar = strtoupper(trim($_SESSION['usu_tipo_juez']));
        }
    }

    $nivel_limpio = $bd->esc($nivel_solicitado);

    // CONSULTA BASE
    $sql_comp = "SELECT c.com_id, c.com_nombre, c.com_puntaje_max, t.tip_nombre 
                 FROM bas_rubrica_componentes c
                 INNER JOIN bas_rubrica_niveles n ON c.niv_id = n.niv_id
                 INNER JOIN bas_juzgamiento_tipos t ON c.tip_id = t.tip_id
                 WHERE UPPER(n.niv_nombre) = UPPER('$nivel_limpio') AND c.com_estado = 1";
    
    // FILTRADO ESTRICTO SEGÚN EL ROL REAL ENCONTRADO
    if ($tipo_juez_evaluar !== 'TODOS' && $tipo_juez_evaluar !== '') {
        if ($tipo_juez_evaluar === 'TECNICO' || $tipo_juez_evaluar === 'TÉCNICO') {
            $sql_comp .= " AND (UPPER(t.tip_nombre) = 'TÉCNICO' OR UPPER(t.tip_nombre) = 'TECNICO')";
        } elseif ($tipo_juez_evaluar === 'COREOGRAFICO' || $tipo_juez_evaluar === 'COREOGRÁFICO') {
            $sql_comp .= " AND (UPPER(t.tip_nombre) = 'COREOGRÁFICO' OR UPPER(t.tip_nombre) = 'COREOGRAFICO')";
        } else {
            $tipo_juez_limpio = $bd->esc($tipo_juez_evaluar);
            $sql_comp .= " AND UPPER(t.tip_nombre) = '$tipo_juez_limpio'";
        }
    }
    
    $componentes_array = $bd->ejecutar_array($sql_comp);

    $response = [];
    if (!empty($componentes_array) && is_array($componentes_array)) {
        foreach ($componentes_array as $row) {
            $com_id = intval($row['com_id']);
            
            // Descriptores del componente
            $sql_items = "SELECT itm_descripcion FROM bas_rubrica_items WHERE com_id = $com_id AND itm_estado = 1";
            $items_array = $bd->ejecutar_array($sql_items);
            
            $items = [];
            if (!empty($items_array) && is_array($items_array)) {
                foreach ($items_array as $item) {
                    $items[] = $item['itm_descripcion'];
                }
            }

            $response[] = [
                'com_id' => $com_id,
                'com_nombre' => $row['com_nombre'],
                'com_puntaje_max' => floatval($row['com_puntaje_max']),
                'tipo_juzgamiento' => $row['tip_nombre'],
                'descriptores' => $items,
                'juez_detectado' => $tipo_juez_evaluar
            ];
        }
    }
    
    echo json_encode($response, JSON_UNESCAPED_UNICODE);
    exit();

} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(["error" => true, "message" => "Error interno: " . $e->getMessage()], JSON_UNESCAPED_UNICODE);
    exit();
}