<?php
/* ─────────────────────────────────────────────────────────────
   obtener_preguntasM7.php – Devuelve preguntas incorrectas
   filtradas por materia (código tipo 'M1') y usuario autenticado
   ✅ VERSIÓN CON SOPORTE DE IMÁGENES
   ───────────────────────────────────────────────────────────── */

// Configurar manejo de errores para JSON
error_reporting(0); // Evitar que errores de PHP contaminen el JSON
ini_set('display_errors', 0);

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

error_log("=== INICIO obtener_preguntasM7.php (CON IMÁGENES) ===");

try {
    /* 1. Autenticación */
    if (!isset($_SESSION['usuario_id'])) {
        error_log("ERROR: usuario_id no está en sesión");
        http_response_code(401);
        echo json_encode(['mensaje' => 'No autorizado.']);
        exit;
    }
    $uid = $_SESSION['usuario_id'];
    error_log("SESSION usuario_id: " . $uid);

    /* 2. Materia seleccionada */
    $materia_id = isset($_GET['materia_id']) ? trim($_GET['materia_id']) : '';
    if ($materia_id === '') {
        error_log("ERROR: materia_id está vacío");
        http_response_code(400);
        echo json_encode(['mensaje' => 'Materia inválida.']);
        exit;
    }
    error_log("GET materia_id: " . $materia_id);

    $host = "localhost";
    $user = "ascensof_Admin1";
    $password = "3DS0NCH4115H4CK3R+";
    $db = "ascensof_BDsimulador";

    $conn = new mysqli($host, $user, $password, $db);
    if ($conn->connect_error) {
        error_log("ERROR: Conexión fallida - " . $conn->connect_error);
        http_response_code(500);
        echo json_encode(['mensaje' => 'Error de conexión a la base de datos.']);
        exit;
    }

    // Configurar charset para la conexión
    $conn->set_charset("utf8");
    error_log("Conexión establecida correctamente");

    /* 4. IDs incorrectos del usuario (todas materias) */
    $stmt = $conn->prepare("SELECT incorrectas FROM Resultados WHERE usuario_id = ?");
    if (!$stmt) {
        error_log("ERROR preparando consulta Resultados: " . $conn->error);
        http_response_code(500);
        echo json_encode(['mensaje' => 'Error preparando consulta.']);
        exit;
    }

    $stmt->bind_param('i', $uid);
    $stmt->execute();
    $res = $stmt->get_result();

    $ids = [];
    $total_filas = 0;
    while ($row = $res->fetch_assoc()) {
        $total_filas++;
        foreach (array_map('trim', explode(',', $row['incorrectas'])) as $id) {
            if (ctype_digit($id)) $ids[] = (int)$id;
        }
    }
    $ids = array_unique($ids);
    
    error_log("Total filas de Resultados: " . $total_filas);
    error_log("Total IDs incorrectos encontrados: " . count($ids));

    if (empty($ids)) {
        error_log("INFO: No hay respuestas incorrectas para usuario_id: " . $uid);
        echo json_encode(['mensaje' => 'El usuario no tiene respuestas incorrectas almacenadas.']);
        exit;
    }

    /* 5. Construir consulta con placeholders dinámicos - ✅ CON IMÁGENES */
    $placeholders = implode(',', array_fill(0, count($ids), '?')); // ?,?,?
    $types = str_repeat('i', count($ids)) . 's'; // 's' para el código materia_id

    $sql = "
        SELECT
            p.Id,
            p.materia_id,
            m.nom_materia AS nombre_materia,
            p.pregunta,
            p.imagen_pregunta,
            p.pregunta_a,
            p.imagen_pregunta_a,
            p.pregunta_b,
            p.imagen_pregunta_b,
            p.opcion1, p.opcion2, p.opcion3, p.opcion4, p.opcion5,
            p.correcta_rpta,
            p.detalle_rpta
        FROM Preguntas p
        JOIN Materias m ON p.materia_id = m.cod_materia
        WHERE p.Id IN ($placeholders)
            AND p.materia_id = ?
    ";
    
    error_log("Consulta SQL construida");

    /* 6. Bind dinámico de parámetros */
    $params = array_merge($ids, [$materia_id]);  // ids..., materia_id
    $stmt2 = $conn->prepare($sql);
    
    if (!$stmt2) {
        error_log("ERROR preparando consulta de preguntas: " . $conn->error);
        http_response_code(500);
        echo json_encode(['mensaje' => 'Error preparando consulta de preguntas.']);
        exit;
    }

    $stmt2->bind_param($types, ...$params);
    $stmt2->execute();
    $result = $stmt2->get_result();

    $preguntas = [];
    while ($row = $result->fetch_assoc()) {
        // ✅ ESTRUCTURA ACTUALIZADA: Asegurar que NULL se convierta en cadena vacía
        $pregunta_procesada = [
            'Id' => $row['Id'],
            'materia_id' => $row['materia_id'],
            'nombre_materia' => $row['nombre_materia'],
            'pregunta' => $row['pregunta'] ?? '',
            'imagen_pregunta' => $row['imagen_pregunta'] ? trim($row['imagen_pregunta']) : '',
            'pregunta_a' => $row['pregunta_a'] ?? '',
            'imagen_pregunta_a' => $row['imagen_pregunta_a'] ? trim($row['imagen_pregunta_a']) : '',
            'pregunta_b' => $row['pregunta_b'] ?? '',
            'imagen_pregunta_b' => $row['imagen_pregunta_b'] ? trim($row['imagen_pregunta_b']) : '',
            'opcion1' => $row['opcion1'] ?? '',
            'opcion2' => $row['opcion2'] ?? '',
            'opcion3' => $row['opcion3'] ?? '',
            'opcion4' => $row['opcion4'] ?? '',
            'opcion5' => $row['opcion5'] ?? '',
            'correcta_rpta' => $row['correcta_rpta'],
            'detalle_rpta' => $row['detalle_rpta'] ?? ''
        ];
        
        // Asegurar encoding UTF-8
        foreach ($pregunta_procesada as $key => &$value) {
            if (is_string($value)) {
                $value = mb_convert_encoding($value, 'UTF-8', 'auto');
            }
        }
        
        // ✅ LOG PARA DEBUGGING: Mostrar si la pregunta tiene imágenes
        if ($pregunta_procesada['imagen_pregunta']) {
            error_log("Pregunta ID {$row['Id']} tiene imagen principal: {$pregunta_procesada['imagen_pregunta']}");
        }
        if ($pregunta_procesada['imagen_pregunta_a']) {
            error_log("Pregunta ID {$row['Id']} tiene imagen A: {$pregunta_procesada['imagen_pregunta_a']}");
        }
        if ($pregunta_procesada['imagen_pregunta_b']) {
            error_log("Pregunta ID {$row['Id']} tiene imagen B: {$pregunta_procesada['imagen_pregunta_b']}");
        }
        
        $preguntas[] = $pregunta_procesada;
    }

    $total_preguntas = count($preguntas);
    error_log("Preguntas incorrectas encontradas para materia '$materia_id': " . $total_preguntas);

    if (empty($preguntas)) {
        error_log("INFO: No hay preguntas incorrectas en materia: " . $materia_id);
        echo json_encode(['mensaje' => 'El usuario no tiene respuestas incorrectas en esta materia.']);
        exit;
    }

    shuffle($preguntas); // opcional
    echo json_encode($preguntas, JSON_UNESCAPED_UNICODE);
    
    error_log("=== FIN EXITOSO obtener_preguntasM7.php ===");

} catch (Exception $e) {
    // Log del error
    error_log("EXCEPCIÓN en obtener_preguntasM7.php: " . $e->getMessage());
    error_log("Stack trace: " . $e->getTraceAsString());
    
    http_response_code(500);
    echo json_encode(['mensaje' => 'Error interno del servidor.']);
} finally {
    // Cerrar conexión si existe
    if (isset($conn) && $conn instanceof mysqli) {
        $conn->close();
        error_log("Conexión cerrada");
    }
}
?>