<?php
/**
 * POST /api/save-volumetrie-bulk.php
 *
 * Aplică aceeași volumetrie pe mai multe produse deodată (selecție din pagina
 * Volumetrie). Salvează DOAR local — nu trimite la eMAG.
 *
 * Body:
 *   ids[]      — id-urile produselor selectate (obligatoriu, cel puțin unul)
 *   length_mm, width_mm, height_mm, weight_g — valorile de aplicat
 *
 * Comportament pe câmpuri:
 *   - câmp completat  → setează acea valoare pe toate produsele selectate
 *   - câmp lăsat gol  → NU se modifică (rămâne valoarea existentă pe fiecare produs)
 * Astfel poți seta, de ex., doar greutatea la toate, fără să ștergi dimensiunile.
 *
 * Orice produs atins are volumetrie_synced_at resetat la NULL.
 */
require_once __DIR__ . '/../includes/db.php';

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    json_response(['ok' => false, 'error' => 'Doar POST'], 405);
}
if (!csrf_check($_POST['csrf_token'] ?? null)) {
    json_response(['ok' => false, 'error' => 'CSRF invalid'], 403);
}

$idsRaw = $_POST['ids'] ?? [];
if (!is_array($idsRaw)) $idsRaw = [$idsRaw];
$ids = array_values(array_unique(array_filter(array_map('intval', $idsRaw), fn($v) => $v > 0)));
if (!$ids) {
    json_response(['ok' => false, 'error' => 'Niciun produs selectat'], 422);
}

/** Parsează un câmp numeric: gol → null (nu modifică); altfel float 0..999999 (2 zecimale). */
$parseDim = function (string $key): ?float {
    $raw = isset($_POST[$key]) ? trim((string)$_POST[$key]) : '';
    if ($raw === '') return null;
    $raw = str_replace(',', '.', $raw);
    if (!is_numeric($raw)) {
        json_response(['ok' => false, 'error' => "Valoare invalidă pentru $key"], 422);
    }
    $v = round((float)$raw, 2);
    if ($v < 0)      $v = 0;
    if ($v > 999999) $v = 999999;
    return $v;
};

$fields = [
    'length_mm' => $parseDim('length_mm'),
    'width_mm'  => $parseDim('width_mm'),
    'height_mm' => $parseDim('height_mm'),
    'weight_g'  => $parseDim('weight_g'),
];

// Doar câmpurile efectiv completate sunt actualizate
$setParts = [];
$setVals  = [];
foreach ($fields as $col => $val) {
    if ($val !== null) {
        $setParts[] = "$col = ?";
        $setVals[]  = $val;
    }
}
if (!$setParts) {
    json_response(['ok' => false, 'error' => 'Completează cel puțin un câmp de volumetrie'], 422);
}
$setParts[] = "volumetrie_synced_at = NULL";

$placeholders = implode(',', array_fill(0, count($ids), '?'));

try {
    $affected = db_exec(
        "UPDATE products SET " . implode(', ', $setParts) . " WHERE id IN ($placeholders)",
        array_merge($setVals, $ids)
    );

    // Returnează rândurile actualizate pentru sincronizarea stării din UI
    $rows = db_select(
        "SELECT id, length_mm, width_mm, height_mm, weight_g, volumetrie_synced_at
         FROM products WHERE id IN ($placeholders)",
        $ids
    );
    json_response(['ok' => true, 'updated' => count($ids), 'products' => $rows]);
} catch (Throwable $ex) {
    error_log('[save-volumetrie-bulk] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => 'Eroare DB: ' . $ex->getMessage()], 500);
}
