<?php
/**
 * POST /api/save-volumetrie.php
 *
 * Salvează LOCAL volumetria unui produs (editare inline din pagina Volumetrie).
 * NU trimite nimic la eMAG — pentru push folosește api/volumetrie-sync.php.
 *
 * Body: id, length_mm, width_mm, height_mm, weight_g
 * Câmpurile goale devin NULL. Orice modificare resetează volumetrie_synced_at
 * (volumetria locală nu mai e „la zi" cu eMAG până la următorul push).
 */
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);
}

$id = (int)($_POST['id'] ?? 0);
if ($id <= 0) {
    json_response(['ok' => false, 'error' => 'id lipsește'], 422);
}

/** Parsează un câmp numeric: gol → NULL; altfel float în 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); // acceptă virgulă zecimală
    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;
};

$length = $parseDim('length_mm');
$width  = $parseDim('width_mm');
$height = $parseDim('height_mm');
$weight = $parseDim('weight_g');

try {
    db_exec(
        "UPDATE products
         SET length_mm = ?, width_mm = ?, height_mm = ?, weight_g = ?,
             volumetrie_synced_at = NULL
         WHERE id = ?",
        [$length, $width, $height, $weight, $id]
    );

    $row = db_select(
        "SELECT id, length_mm, width_mm, height_mm, weight_g, volumetrie_synced_at
         FROM products WHERE id = ?",
        [$id]
    );
    json_response(['ok' => true, 'product' => $row[0] ?? null]);
} catch (Throwable $ex) {
    error_log('[save-volumetrie] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => 'Eroare DB: ' . $ex->getMessage()], 500);
}
