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

// 1. SEGURIDAD: Solo el administrador puede ejecutar esto
if (!isset($_SESSION['email']) || $_SESSION['email'] !== 'educajoam33@gmail.com') {
    header("Location: login.php");
    exit();
}

if ($_SERVER["REQUEST_METHOD"] == "POST") {
    
    // 2. LIMPIEZA DE DATOS (Sanitización avanzada)
    $titulo      = filter_input(INPUT_POST, 'titulo', FILTER_SANITIZE_SPECIAL_CHARS);
    $area        = filter_input(INPUT_POST, 'area', FILTER_SANITIZE_SPECIAL_CHARS) ?: 'General';
    $nivel       = filter_input(INPUT_POST, 'nivel', FILTER_SANITIZE_SPECIAL_CHARS);
    $precio      = filter_input(INPUT_POST, 'precio', FILTER_SANITIZE_NUMBER_FLOAT, FILTER_FLAG_ALLOW_FRACTION);
    $descripcion = filter_input(INPUT_POST, 'descripcion', FILTER_SANITIZE_SPECIAL_CHARS) ?: '';

    // 3. CONFIGURACIÓN DE CARPETA Y PERMISOS
    $directorio_subida = __DIR__ . '/archivos_vendedores/';
    
    if (!file_exists($directorio_subida)) {
        mkdir($directorio_subida, 0755, true);
    }
    
    // Forzamos el permiso 0755 y el candado de seguridad
    chmod($directorio_subida, 0755);
    if (!file_exists($directorio_subida . ".htaccess")) {
        file_put_contents($directorio_subida . ".htaccess", "Deny from all");
    }

    // 4. VALIDACIONES DEL ARCHIVO
    if (!isset($_FILES['archivo']) || $_FILES['archivo']['error'] !== UPLOAD_ERR_OK) {
        echo "<script>alert('Error: Problema al recibir el archivo.'); window.history.back();</script>";
        exit();
    }

    // Límite de tamaño (Ejemplo: 20MB)
    if ($_FILES['archivo']['size'] > 20 * 1024 * 1024) {
        echo "<script>alert('Error: El archivo es demasiado grande (Máximo 20MB).'); window.history.back();</script>";
        exit();
    }

    $nombre_original = $_FILES['archivo']['name'];
    $extension       = strtolower(pathinfo($nombre_original, PATHINFO_EXTENSION));
    $solo_nombre     = pathinfo($nombre_original, PATHINFO_FILENAME);
    
    $permitidos = ['pdf', 'zip', 'rar', 'docx', 'doc', 'pptx'];
    
    if (!in_array($extension, $permitidos)) {
        echo "<script>alert('Error: Formato no válido. Solo PDF, Word, Powerpoint, ZIP o RAR.'); window.history.back();</script>";
        exit();
    }

    // 5. NOMBRE ÚNICO E IMPREDECIBLE
    $nombre_limpio = preg_replace("/[^a-zA-Z0-9]/", "_", $solo_nombre);
    $nombre_final  = "MAT_" . bin2hex(random_bytes(4)) . "_" . time() . "." . $extension;
    $ruta_completa = $directorio_subida . $nombre_final;

    // 6. PROCESO DE SUBIDA E INSERCIÓN
    if (move_uploaded_file($_FILES['archivo']['tmp_name'], $ruta_completa)) {
        
        // Usamos transacciones o Prepared Statements para máxima seguridad
        $stmt = $conexion->prepare("INSERT INTO materiales (titulo, area, nivel, precio, descripcion, archivo_url) VALUES (?, ?, ?, ?, ?, ?)");
        // "sssdss" -> string, string, string, double(decimal), string, string
        $stmt->bind_param("sssdss", $titulo, $area, $nivel, $precio, $descripcion, $nombre_final);

        if ($stmt->execute()) {
            echo "<script>
                    alert('¡Material publicado con éxito!');
                    window.location='admin.php';
                  </script>";
        } else {
            // Si la base de datos falla, eliminamos el archivo para no desperdiciar espacio
            if (file_exists($ruta_completa)) { unlink($ruta_completa); }
            echo "<script>alert('Error interno al guardar los datos.'); window.history.back();</script>";
        }
        $stmt->close();
        
    } else {
        echo "<script>alert('Error crítico: El servidor no permitió guardar el archivo en la carpeta.'); window.history.back();</script>";
    }

} else {
    header("Location: admin.php");
    exit();
}
?>