<?php
session_start();
include 'conexion.php';

// 1. SEGURIDAD: Verificar sesión activa
if (!isset($_SESSION['user_id'])) {
    header("Location: login.php");
    exit();
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // Usamos filter_input para mayor limpieza inicial
    $usuario_id  = $_SESSION['user_id'];
    $material_id = filter_input(INPUT_POST, 'material_id', FILTER_SANITIZE_NUMBER_INT);
    $monto       = filter_input(INPUT_POST, 'monto', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);

    // 2. CONFIGURACIÓN DE CARPETA Y AUTO-PROTECCIÓN
    $directorio = "comprobantes/";
    if (!file_exists($directorio)) {
        // Crea la carpeta con permisos seguros
        mkdir($directorio, 0755, true);
        
        // Crea un index.php vacío para que nadie pueda listar los archivos
        file_put_contents($directorio . "index.php", "<?php // Acceso denegado ?>");
        
        // Crea un .htaccess para prohibir el listado de directorios a nivel servidor
        file_put_contents($directorio . ".htaccess", "Options -Indexes");
    }

    // 3. PROCESAR EL ARCHIVO
    if (isset($_FILES['comprobante']) && $_FILES['comprobante']['error'] === UPLOAD_ERR_OK) {
        
        $tmp_name    = $_FILES['comprobante']['tmp_name'];
        $archivo_ext = strtolower(pathinfo($_FILES['comprobante']['name'], PATHINFO_EXTENSION));
        $extensiones_permitidas = ['jpg', 'jpeg', 'png', 'webp'];

        // VALIDACIÓN A: Extensión
        if (!in_array($archivo_ext, $extensiones_permitidas)) {
            echo "<script>alert('Formato no permitido.'); window.history.back();</script>";
            exit;
        }

        // VALIDACIÓN B: ¿Es una imagen real?
        $es_imagen = getimagesize($tmp_name);
        if ($es_imagen === false) {
            echo "<script>alert('El archivo no es una imagen válida.'); window.history.back();</script>";
            exit;
        }

        // VALIDACIÓN C: Tamaño máximo 3MB
        if ($_FILES['comprobante']['size'] > 3000000) {
            echo "<script>alert('El archivo es demasiado grande (Máximo 3MB).'); window.history.back();</script>";
            exit;
        }

        // Nombre único e impredecible
        $nombre_final = "V_" . bin2hex(random_bytes(8)) . "_" . time() . "." . $archivo_ext;
        $ruta_destino = $directorio . $nombre_final;

        if (move_uploaded_file($tmp_name, $ruta_destino)) {
            
            // 4. INSERTAR USANDO PREPARED STATEMENTS
            $stmt = $conexion->prepare("INSERT INTO pagos_pendientes (usuario_id, material_id, monto, comprobante_url, estado) VALUES (?, ?, ?, ?, 'pendiente')");
            $stmt->bind_param("iids", $usuario_id, $material_id, $monto, $nombre_final);

            if ($stmt->execute()) {
                echo "<script>
                        alert('¡Comprobante enviado con éxito! Verificaremos tu pago pronto.');
                        window.location='mis_compras.php';
                      </script>";
            } else {
                unlink($ruta_destino); // Borra el archivo si falló la base de datos
                echo "Error en el registro: " . $conexion->error;
            }
            $stmt->close();

        } else {
            echo "<script>alert('Error al guardar en el servidor.'); window.history.back();</script>";
        }
    } else {
        echo "<script>alert('Error en la subida del archivo.'); window.history.back();</script>";
    }
} else {
    header("Location: index.php");
}
?>