<?php
session_start();
// Asegúrate de que conexion.php use mysqli
include 'conexion.php'; 

/**
 * 1. SEGURIDAD DE SESIÓN
 */
if (!isset($_SESSION['user_id'])) {
    die("Acceso denegado: Debes iniciar sesión.");
}

// Sanitización del ID
$id_material = filter_input(INPUT_GET, 'id', FILTER_VALIDATE_INT);
$user_id     = $_SESSION['user_id'];
$email_user  = $_SESSION['email'] ?? '';

if (!$id_material) {
    die("ID de material no válido.");
}

/**
 * 2. LÓGICA DE AUTORIZACIÓN 
 * (Solo entra el Admin o quien tenga la venta aprobada)
 */
$es_admin = ($email_user === 'educajoam33@gmail.com');
$autorizado = false;

if ($es_admin) {
    $autorizado = true;
} else {
    // Verificamos si existe la venta aprobada para este usuario
    $stmt = $conexion->prepare("SELECT id FROM ventas WHERE material_id = ? AND usuario_id = ?");
    $stmt->bind_param("ii", $id_material, $user_id);
    $stmt->execute();
    $res_check = $stmt->get_result();
    
    if ($res_check->num_rows > 0) {
        $autorizado = true;
    }
    $stmt->close();
}

/**
 * 3. PROCESO DE ENTREGA DEL ARCHIVO E INCREMENTO DE CONTADOR
 */
if ($autorizado) {
    
    // --- NUEVO: ACTUALIZACIÓN DEL CONTADOR DE CLICS ---
    // Solo sumamos si no es el administrador (para no inflar los números del dueño)
    if (!$es_admin) {
        $stmt_update = $conexion->prepare("UPDATE ventas SET descargas_realizadas = descargas_realizadas + 1 WHERE material_id = ? AND usuario_id = ?");
        $stmt_update->bind_param("ii", $id_material, $user_id);
        $stmt_update->execute();
        $stmt_update->close();
    }
    // --------------------------------------------------

    // Obtenemos el nombre del archivo guardado en la BD
    $stmt_m = $conexion->prepare("SELECT archivo_url, titulo FROM materiales WHERE id = ?");
    $stmt_m->bind_param("i", $id_material);
    $stmt_m->execute();
    $res_m = $stmt_m->get_result();
    $material = $res_m->fetch_assoc();
    $stmt_m->close();

    if ($material && !empty($material['archivo_url'])) {
        $nombre_fisico = $material['archivo_url']; 
        $ruta_archivo = __DIR__ . '/archivos_vendedores/' . $nombre_fisico;

        // Validar existencia real del archivo
        if (file_exists($ruta_archivo)) {
            
            // Determinar tipo MIME
            $extension = strtolower(pathinfo($ruta_archivo, PATHINFO_EXTENSION));
            $mimes = [
                'pdf'  => 'application/pdf',
                'zip'  => 'application/zip',
                'rar'  => 'application/x-rar-compressed',
                'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
                'doc'  => 'application/msword',
                'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation'
            ];
            $ctype = $mimes[$extension] ?? 'application/octet-stream';

            // LIMPIEZA TOTAL DEL BÚFER
            while (ob_get_level()) {
                ob_end_clean();
            }

            // Headers de descarga forzada
            header('Content-Description: File Transfer');
            header('Content-Type: ' . $ctype);
            header('Content-Disposition: attachment; filename="' . $nombre_fisico . '"');
            header('Content-Transfer-Encoding: binary');
            header('Expires: 0');
            header('Cache-Control: must-revalidate');
            header('Pragma: public');
            header('Content-Length: ' . filesize($ruta_archivo));
            
            // LECTURA POR BLOQUES (Chunked Read)
            $file = fopen($ruta_archivo, 'rb');
            if ($file) {
                while (!feof($file)) {
                    echo fread($file, 1024 * 8); 
                    flush(); 
                }
                fclose($file);
            }
            exit;

        } else {
            die("Error: El archivo físico no se encuentra en el servidor.");
        }
    } else {
        die("Error: El recurso solicitado no existe.");
    }
} else {
    header("Location: mis_compras.php?error=no_autorizado");
    exit();
}
?>