<?php
session_start();

// ✅ CONFIGURACIÓN PARA PDF - CRÍTICO
ob_clean(); // Limpiar buffer de salida ANTES de cualquier cosa
error_reporting(0); // Desactivar errores en producción para PDF
ini_set('display_errors', 0); // No mostrar errores que corrompan el PDF

// Verificar autenticación
if (!isset($_SESSION['usuario']) || !isset($_SESSION['usuario_id'])) {
    header('HTTP/1.1 401 Unauthorized');
    exit('Usuario no autenticado');
}

require 'conexion.php';
require 'fpdf/fpdf_protection.php';

// 📥 Recibir y validar datos
$input = file_get_contents('php://input');
$data = json_decode($input, true);

if (!$data || !isset($data['preguntas'], $data['respuestas'], $data['nota'])) {
    header('HTTP/1.1 400 Bad Request');
    exit('Datos inválidos');
}

$preguntas = $data['preguntas'];
$respuestas = $data['respuestas'];
$nota = $data['nota'];
$usuario = $_SESSION['usuario'] ?? 'Usuario';

// 📌 Clase PDF personalizada
class ReportePDF extends FPDF_Protection
{
    private $materia;
    private $fecha;
    private $usuario;

    function __construct($materia = '', $fecha = '', $usuario = '') {
        parent::__construct();
        $this->materia = $materia;
        $this->fecha = $fecha;
        $this->usuario = $usuario;
    }

    function Header()
    {
        // Marca de agua (opcional)
        if (file_exists('imagenes/logo_marca.png')) {
            $this->Image('imagenes/logo_marca.png', 30, 60, 170, 0, 'PNG'); 
        }
 
        $this->SetFont('Arial', 'B', 9);
        $this->SetTextColor(255, 0, 0);
        $this->Cell(0, 5, $this->convertText('SIMULADOR AscensoFacil - Cel: 920053836'), 0, 1, 'R');
        $this->SetTextColor(0, 0, 0);

        $this->Ln(2);
        $this->SetDrawColor(0, 0, 0);
        $this->SetLineWidth(0.3);
        $this->Line(20, $this->GetY(), 190, $this->GetY());
        $this->Ln(5);
    }

    function Footer()
    {
        $this->SetY(-20);
        $this->SetDrawColor(0, 0, 0);
        $this->SetLineWidth(0.3);
        $this->Line(20, $this->GetY(), 190, $this->GetY());

        $this->SetY(-15);
        $this->SetFont('Arial', 'I', 8);
        $this->Cell(0, 10, $this->convertText('Página ' . $this->PageNo() . '/{nb}'), 0, 0, 'C');
    }

    // ✅ Función auxiliar para convertir texto UTF-8
    function convertText($text) {
        return iconv('UTF-8', 'windows-1252//IGNORE', $text);
    }
}

// 📊 Calcular estadísticas
$correctas = 0;
$incorrectas = 0;
$sinResponder = 0;

foreach ($preguntas as $index => $pregunta) {
    $respuestaUsuario = isset($respuestas[$index]) ? $respuestas[$index] : null;
    $respuestaCorrecta = intval($pregunta['correcta_rpta']);
    
    if ($respuestaUsuario === null) {
        $sinResponder++;
    } elseif ($respuestaUsuario == $respuestaCorrecta) {
        $correctas++;
    } else {
        $incorrectas++;
    }
}

$nombreMateria = $preguntas[0]['nombre_materia'] ?? 'Examen General';
$fechaExamen = date('d/m/Y H:i:s');

// Funciones auxiliares
function calcularOpcionesValidas($pregunta) {
    $opciones = [
        $pregunta['opcion1'] ?? '', 
        $pregunta['opcion2'] ?? '', 
        $pregunta['opcion3'] ?? '', 
        $pregunta['opcion4'] ?? '', 
        $pregunta['opcion5'] ?? ''
    ];
    $opcionesValidas = [];
    foreach ($opciones as $i => $opcion) {
        if (!empty(trim($opcion))) {
            $opcionesValidas[] = $i + 1;
        }
    }
    return $opcionesValidas;
}

function obtenerLetraOpcion($numeroOpcion, $opcionesValidas) {
    $posicion = array_search($numeroOpcion, $opcionesValidas);
    return $posicion !== false ? chr(65 + $posicion) : '?';
}

try {
    // 📄 Crear PDF
    $pdf = new ReportePDF($nombreMateria, $fechaExamen, $usuario);
    $pdf->AliasNbPages();
    $pdf->SetMargins(15, 10, 15);
    $pdf->AddPage();

    // 📋 Título del reporte
    $pdf->SetFont('Arial', 'B', 16);
    $pdf->Cell(0, 10, $pdf->convertText('REPORTE DETALLADO DEL EXAMEN'), 0, 1, 'C');

  //  $pdf->SetFont('Arial', 'B', 12);
  //  $pdf->Cell(0, 8, $pdf->convertText('MATERIA: ' . strtoupper($nombreMateria)), 0, 1, 'C');

    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(0, 6, $pdf->convertText('Usuario: ' . $usuario), 0, 1, 'L');
    $pdf->Cell(0, 6, $pdf->convertText('Fecha: ' . $fechaExamen), 0, 1, 'L');
    $pdf->Ln(5);

    // 📊 Resumen de resultados
    $pdf->SetFillColor(240, 240, 240);
    $pdf->SetFont('Arial', 'B', 11);
    $pdf->Cell(0, 8, $pdf->convertText('RESUMEN DE RESULTADOS'), 1, 1, 'C', true);

    $pdf->SetFont('Arial', '', 10);
    $pdf->Cell(0, 6, $pdf->convertText('Total de preguntas: ' . count($preguntas)), 1, 1, 'L');
    $pdf->Cell(0, 6, $pdf->convertText('Respuestas correctas: ' . $correctas), 1, 1, 'L');
    $pdf->Cell(0, 6, $pdf->convertText('Respuestas incorrectas: ' . $incorrectas), 1, 1, 'L');
    $pdf->Cell(0, 6, $pdf->convertText('Sin responder: ' . $sinResponder), 1, 1, 'L');
    $pdf->Cell(0, 6, $pdf->convertText('Puntaje obtenido: ' . $nota . ' puntos'), 1, 1, 'L');

    $estado = $nota >= 36 ? 'APROBADO' : 'DESAPROBADO';
    $pdf->SetFont('Arial', 'B', 10);
    $pdf->Cell(0, 8, $pdf->convertText('Estado: ' . $estado), 1, 1, 'C');
    $pdf->Ln(8);

    // 📝 Detalle por pregunta
    $pdf->SetFont('Arial', 'B', 11);
    $pdf->Cell(0, 8, $pdf->convertText('DETALLE POR PREGUNTA'), 0, 1, 'L');
    $pdf->Ln(3);

    $pdf->SetFont('Arial', '', 9);

    foreach ($preguntas as $index => $pregunta) {
        // Verificar espacio en la página
        if ($pdf->GetY() > 250) {
            $pdf->AddPage();
        }

        $respuestaUsuario = isset($respuestas[$index]) ? $respuestas[$index] : null;
        $respuestaCorrecta = intval($pregunta['correcta_rpta']);
        
        // Construir texto completo de la pregunta
        $textoPregunta = '';
        if (!empty($pregunta['pregunta'])) {
            $textoPregunta .= $pregunta['pregunta'];
        }
        if (!empty($pregunta['pregunta_a'])) {
            $textoPregunta .= ' ' . $pregunta['pregunta_a'];
        }
        if (!empty($pregunta['pregunta_b'])) {
            $textoPregunta .= ' ' . $pregunta['pregunta_b'];
        }

        // Determinar estado y colores
        $estado = '';
        $colorR = 0; $colorG = 0; $colorB = 0;
        
        if ($respuestaUsuario === null) {
            $estado = 'SIN RESPONDER';
            $colorR = 255; $colorG = 193; $colorB = 7;
        } elseif ($respuestaUsuario == $respuestaCorrecta) {
            $estado = 'ACERTADO';
            $colorR = 40; $colorG = 167; $colorB = 69;
        } else {
            $estado = 'FALLADO';
            $colorR = 220; $colorG = 53; $colorB = 69;
        }

        // 📌 Número de pregunta
        $pdf->SetFont('Arial', 'B', 10);
        $pdf->Cell(0, 6, $pdf->convertText('Pregunta ' . ($index + 1)), 0, 1, 'L');
        
        // 📌 Texto de la pregunta
        $pdf->SetFont('Arial', '', 9);
        $pdf->MultiCell(0, 5, $pdf->convertText($textoPregunta), 0, 'J');
        $pdf->Ln(2);

        // Calcular opciones válidas
        $opcionesValidas = calcularOpcionesValidas($pregunta);

        // 📌 Opción marcada
        if ($respuestaUsuario !== null) {
            $textoOpcionMarcada = $pregunta['opcion' . $respuestaUsuario] ?? 'Opción no válida';
            $letraOpcionMarcada = obtenerLetraOpcion($respuestaUsuario, $opcionesValidas);
            
            $pdf->MultiCell(0, 5, $pdf->convertText('Opción marcada: ' . $letraOpcionMarcada . '. ' . $textoOpcionMarcada), 0, 1, 'L');
        } else {
            $pdf->MultiCell(0, 5, $pdf->convertText('Opción marcada: Sin responder'), 0, 1, 'L');
        }

        // 📌 Opción correcta
        $textoOpcionCorrecta = $pregunta['opcion' . $respuestaCorrecta] ?? 'Opción no válida';
        $letraOpcionCorrecta = obtenerLetraOpcion($respuestaCorrecta, $opcionesValidas);
        
        $pdf->MultiCell(0, 5, $pdf->convertText('Opción correcta: ' . $letraOpcionCorrecta . '. ' . $textoOpcionCorrecta), 0, 1, 'L');

        // 📌 Estado (con color de fondo)
        $pdf->SetFillColor($colorR, $colorG, $colorB);
        $pdf->SetTextColor(255, 255, 255);
        $pdf->SetFont('Arial', 'B', 9);
        $pdf->Cell(0, 6, $pdf->convertText('Usted ha: ' . $estado), 1, 1, 'C', true);
        
        // Restaurar colores
        $pdf->SetTextColor(0, 0, 0);
        $pdf->SetFillColor(255, 255, 255);
        
        $pdf->Ln(5);
    }

    // ✅ HEADERS CORRECTOS PARA PDF - MUY IMPORTANTE
    $nombreArchivo = 'Reporte_Examen_' . str_replace(' ', '_', $nombreMateria) . '_' . date('Y-m-d_H-i-s') . '.pdf';
    
    // Limpiar COMPLETAMENTE el buffer de salida
    while (ob_get_level()) {
        ob_end_clean();
    }
    
    // Headers HTTP correctos
    header('Content-Type: application/pdf', true);
    header('Content-Disposition: attachment; filename="' . $nombreArchivo . '"', true);
    header('Content-Transfer-Encoding: binary', true);
    header('Accept-Ranges: bytes', true);
    header('Cache-Control: private, no-transform, no-store, must-revalidate', true);
    header('Pragma: no-cache', true);
    header('Expires: 0', true);
    
    // ✅ Generar y enviar PDF - SIN parametros adicionales
    $pdf->Output('D', $nombreArchivo);
    exit(); // Terminar script inmediatamente

} catch (Exception $e) {
    // En caso de error, enviar respuesta JSON
    while (ob_get_level()) {
        ob_end_clean();
    }
    
    header('Content-Type: application/json', true);
    header('HTTP/1.1 500 Internal Server Error', true);
    echo json_encode(['error' => 'Error al generar PDF: ' . $e->getMessage()]);
    exit();
}
?>