<?php
/**
 * ICYLAB OS - Edición Masiva de Productos
 */
require_once '../../core/config.php';
require_once '../../core/session.php';
require_once '../../core/database.php';
require_once '../../core/permissions.php'; // Agrega esto en los require

require_login();
require_permission('module.products'); // Agrega este candado

if ($_SERVER['REQUEST_METHOD'] !== 'POST') die('Método no permitido.');

$pdo = db();

// Recibimos los IDs (vienen como un string separado por comas "1,5,12")
$product_ids_raw = $_POST['product_ids'] ?? '';
$bulk_category_id = $_POST['bulk_category_id'] ?? '';
$bulk_is_active = $_POST['bulk_is_active'] ?? '';
$bulk_unit = $_POST['bulk_unit'] ?? '';

function product_bulk_clean_unit($unit)
{
    $allowed = array('unidad', 'mL', 'L', 'g', 'kg', 'pack', 'caja', 'servicio');
    $unit = trim((string)$unit);
    return in_array($unit, $allowed, true) ? $unit : '';
}

// Convertir string a array de enteros seguros
$ids = array_filter(array_map('intval', explode(',', $product_ids_raw)));

if (empty($ids)) {
    header('Location: /modules/products/index.php');
    exit;
}

// Construimos la consulta dinámica según lo que se haya llenado
$updates = [];
$params = [];

// Manejo de Categoría
if ($bulk_category_id === 'NULL') {
    $updates[] = "category_id = NULL";
} elseif ($bulk_category_id !== '') {
    $updates[] = "category_id = ?";
    $params[] = (int)$bulk_category_id;
}

// Manejo de Unidad Comercial
$bulk_unit = product_bulk_clean_unit($bulk_unit);
if ($bulk_unit !== '') {
    $updates[] = "unit = ?";
    $params[] = $bulk_unit;
}

// Manejo de Estado
if ($bulk_is_active !== '') {
    $updates[] = "is_active = ?";
    $params[] = (int)$bulk_is_active;
}

// Si hay algo que actualizar, ejecutamos la consulta
if (!empty($updates)) {
    // Generar los placeholders (?,?,?) para el IN()
    $inQuery = implode(',', array_fill(0, count($ids), '?'));
    
    // Anexamos los IDs al final del array de parámetros
    $params = array_merge($params, $ids);
    
    $sql = "UPDATE products SET " . implode(', ', $updates) . ", updated_at = NOW() WHERE id IN ($inQuery)";
    
    try {
        $stmt = $pdo->prepare($sql);
        $stmt->execute($params);
        
        // NOTA: Para no saturar la API de FACTO, las ediciones masivas no se empujan automáticamente.
        // El usuario puede usar el botón "Importar/Sincronizar" o lo gestionas con un Cronjob nocturno si es requerido.
        
    } catch (Throwable $e) {
        die("Error en actualización masiva: " . $e->getMessage());
    }
}

header('Location: /modules/products/index.php');
exit;