<?php
/**
 * POST /api/save-stock.php
 *
 * Salvează LOCAL stocul nou al unui produs (editare inline din pagina Stocuri).
 * NU trimite nimic la eMAG — pentru push folosește api/stock-sync.php sau
 * api/stock-send-one.php.
 *
 * Body: id, stock
 * Câmp gol → NULL. Orice modificare resetează stock_synced_at (stocul local nu
 * mai e „la zi" cu eMAG până la următorul push).
 *
 * Refuză produsele dintr-un cont FBE (Fulfillment by eMAG): pentru acestea
 * stocul e gestionat de eMAG și nu poate fi setat de seller.
 */
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);
}

// Blochează setarea stocului pentru conturile FBE.
$isFbe = (int)db_scalar(
    "SELECT COALESCE(a.is_fbe, 0) FROM products p
     LEFT JOIN emag_accounts a ON a.id = p.emag_account_id
     WHERE p.id = ?",
    [$id]
);
if ($isFbe === 1) {
    json_response(['ok' => false, 'error' => 'Cont FBE — stocul e gestionat de eMAG și nu poate fi setat.'], 422);
}

// Parsează stocul: gol → NULL; altfel întreg în 0..999999.
$raw = isset($_POST['stock']) ? trim((string)$_POST['stock']) : '';
$stock = null;
if ($raw !== '') {
    if (!ctype_digit($raw)) {
        json_response(['ok' => false, 'error' => 'Stoc invalid (număr întreg >= 0)'], 422);
    }
    $stock = (int)$raw;
    if ($stock > 999999) $stock = 999999;
}

try {
    db_exec(
        "UPDATE products SET stock = ?, stock_synced_at = NULL WHERE id = ?",
        [$stock, $id]
    );

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