<?php
session_start();
if (!isset($_SESSION['usuario']) || !isset($_SESSION['token'])) {
    die("Acceso no autorizado");
}

require 'conexion.php';

if ($_POST['accion'] !== 'importar' || !isset($_FILES['archivo'])) {
    die("Error: No se recibió el archivo correctamente");
}

$archivo = $_FILES['archivo'];
$extension = strtolower(pathinfo($archivo['name'], PATHINFO_EXTENSION));

if ($archivo['error'] !== UPLOAD_ERR_OK) {
    die("Error al subir el archivo");
}

// Validar extensión
if (!in_array($extension, ['csv', 'txt'])) {
    die("Solo se permiten archivos CSV o TXT");
}

$preguntasImportadas = 0;
$errores = [];

try {
    $handle = fopen($archivo['tmp_name'], 'r');
    if (!$handle) {
        die("No se pudo leer el archivo");
    }

    // Leer la primera línea como encabezado
    $headers = fgetcsv($handle, 1000, ",");
    if (!$headers) {
        die("El archivo está vacío o no tiene el formato correcto");
    }

    // Validar que tenga las columnas necesarias
    $columnasRequeridas = ['materia_id', 'pregunta', 'opcion1', 'opcion2', 'opcion3', 'opcion4', 'correcta_rpta'];
    foreach ($columnasRequeridas as $col) {
        if (!in_array($col, $headers)) {
            die("Falta la columna requerida: $col");
        }
    }

    // Verificar que los códigos de materia existen
    $materiasValidas = [];
    $result = $conn->query("SELECT cod_materia FROM Materias");
    while ($row = $result->fetch_assoc()) {
        $materiasValidas[] = $row['cod_materia'];
    }

    // Obtener índices de columnas
    $indices = array_flip($headers);

    // Preparar statement
    $stmt = $conn->prepare("INSERT INTO Preguntas (materia_id, pregunta, opcion1, opcion2, opcion3, opcion4, opcion5, correcta_rpta, detalle_rpta) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)");

    $lineaNumero = 1;
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $lineaNumero++;
        
        try {
            $materia_id = isset($indices['materia_id']) ? trim($data[$indices['materia_id']]) : '';
            $pregunta = isset($indices['pregunta']) ? trim($data[$indices['pregunta']]) : '';
            $opcion1 = isset($indices['opcion1']) ? trim($data[$indices['opcion1']]) : '';
            $opcion2 = isset($indices['opcion2']) ? trim($data[$indices['opcion2']]) : '';
            $opcion3 = isset($indices['opcion3']) ? trim($data[$indices['opcion3']]) : '';
            $opcion4 = isset($indices['opcion4']) ? trim($data[$indices['opcion4']]) : '';
            $opcion5 = isset($indices['opcion5']) ? trim($data[$indices['opcion5']]) : '';
            $correcta_rpta = isset($indices['correcta_rpta']) ? trim($data[$indices['correcta_rpta']]) : '';
            $detalle_rpta = isset($indices['detalle_rpta']) ? trim($data[$indices['detalle_rpta']]) : '';

            // Validaciones
            if (empty($pregunta) || empty($opcion1) || empty($opcion2) || empty($opcion3) || empty($opcion4)) {
                $errores[] = "Línea $lineaNumero: Faltan datos obligatorios";
                continue;
            }

            if (!in_array($materia_id, $materiasValidas)) {
                $errores[] = "Línea $lineaNumero: Código de materia '$materia_id' no existe en la tabla Materias";
                continue;
            }

            if ($correcta_rpta < 1 || $correcta_rpta > 5) {
                $errores[] = "Línea $lineaNumero: Respuesta correcta inválida ($correcta_rpta)";
                continue;
            }

            if ($correcta_rpta == 5 && empty($opcion5)) {
                $errores[] = "Línea $lineaNumero: Opción 5 marcada como correcta pero está vacía";
                continue;
            }

            // Insertar pregunta
            $stmt->bind_param("issssssss", $materia_id, $pregunta, $opcion1, $opcion2, $opcion3, $opcion4, $opcion5, $correcta_rpta, $detalle_rpta);
            
            if ($stmt->execute()) {
                $preguntasImportadas++;
            } else {
                $errores[] = "Línea $lineaNumero: Error al insertar - " . $conn->error;
            }

        } catch (Exception $e) {
            $errores[] = "Línea $lineaNumero: " . $e->getMessage();
        }
    }

    fclose($handle);

    // Resultado final
    $mensaje = "Importación completada. $preguntasImportadas preguntas importadas exitosamente.";
    
    if (count($errores) > 0) {
        $mensaje .= " Errores encontrados: " . count($errores);
        if (count($errores) <= 5) {
            $mensaje .= " - " . implode(", ", array_slice($errores, 0, 5));
        }
    }

    echo $mensaje;

} catch (Exception $e) {
    echo "Error general: " . $e->getMessage();
}

/*
FORMATO DEL ARCHIVO CSV ESPERADO:
materia_id,pregunta,opcion1,opcion2,opcion3,opcion4,opcion5,correcta_rpta,detalle_rpta
MAT001,"¿Cuál es la capital de Perú?","Lima","Cusco","Arequipa","Trujillo","",1,"Lima es la capital y ciudad más poblada del Perú"
MAT001,"¿En qué año se fundó Lima?","1535","1534","1536","1533","",1,"Lima fue fundada por Francisco Pizarro el 18 de enero de 1535"

NOTA: 
- materia_id debe coincidir con cod_materia de la tabla Materias
- Estructura de tabla Materias: Id, cod_materia, nom_materia, acceso_id, cant_pregunta, url_id
- Relación: Preguntas.materia_id = Materias.cod_materia
*/