<?php
/**
 * POST /api/save-goods.php
 *
 * Creează sau actualizează o marfă din catalog.
 * Body: id (0 = nou), sku, name, unit, default_price, supplier, notes, is_active
 */
require_once __DIR__ . '/../includes/orders.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);
$name     = trim((string)($_POST['name'] ?? ''));
$sku      = trim((string)($_POST['sku'] ?? '')) ?: null;
$unit     = trim((string)($_POST['unit'] ?? 'buc')) ?: 'buc';
$supplier = trim((string)($_POST['supplier'] ?? '')) ?: null;
$notes    = trim((string)($_POST['notes'] ?? '')) ?: null;
$isActive = array_key_exists('is_active', $_POST) ? (!empty($_POST['is_active']) ? 1 : 0) : 1;

$priceRaw = str_replace(',', '.', trim((string)($_POST['default_price'] ?? '')));
// Până la 6 zecimale, ca prețul implicit din catalog să poată alimenta și
// comenzile setate pe mai multe zecimale (ex. 0,0125 lei/bucată).
$price    = ($priceRaw === '' || !is_numeric($priceRaw)) ? null : round((float)$priceRaw, 6);

if ($name === '') {
    json_response(['ok' => false, 'error' => 'Denumirea e obligatorie.'], 422);
}
if (mb_strlen($name) > 255) $name = mb_substr($name, 0, 255);
if ($price !== null && $price < 0) {
    json_response(['ok' => false, 'error' => 'Prețul nu poate fi negativ.'], 422);
}

try {
    if ($id > 0) {
        db_exec(
            "UPDATE goods
                SET sku = ?, name = ?, unit = ?, default_price = ?, supplier = ?, notes = ?, is_active = ?,
                    updated_at = CURRENT_TIMESTAMP
              WHERE id = ?",
            [$sku, $name, $unit, $price, $supplier, $notes, $isActive, $id]
        );
    } else {
        // Marfa nouă intră prima în listă (ca în UI, unde apare sus).
        $topPos = (int)db_scalar("SELECT COALESCE(MIN(position), 1) - 1 FROM goods");
        $id = db_exec(
            "INSERT INTO goods (sku, name, unit, default_price, supplier, notes, is_active, position)
             VALUES (?, ?, ?, ?, ?, ?, ?, ?)",
            [$sku, $name, $unit, $price, $supplier, $notes, $isActive, $topPos]
        );
    }
    $rows = db_select("SELECT * FROM goods WHERE id = ?", [$id]);
    json_response(['ok' => true, 'goods' => $rows[0] ?? null]);
} catch (Throwable $ex) {
    error_log('[save-goods] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => $ex->getMessage()], 500);
}
