<?php
/**
 * POST /api/save-setting.php
 *
 * Salvează o setare generală (tabel app_settings). Doar chei din allowlist.
 *
 * Body: key, value
 *   - vat_rate → procent numeric 0..100 (acceptă virgulă zecimală)
 */
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);
}

$key   = trim((string)($_POST['key'] ?? ''));
$value = trim((string)($_POST['value'] ?? ''));

require_once __DIR__ . '/../includes/orders.php';
$companyKeys = array_map(fn($k) => 'order_company_' . $k, order_company_keys());
$companyKeys[] = 'order_company_contact'; // cheie veche, păstrată pentru compatibilitate
$allowed = array_merge(
    ['vat_rate', 'fbe_label_w', 'fbe_label_h', 'qz_printer', 'fbe_label_opts', 'fbe_label_title'],
    $companyKeys
);
if (!in_array($key, $allowed, true)) {
    json_response(['ok' => false, 'error' => 'Setare necunoscută'], 422);
}

// Datele firmei de pe comanda printată — text liber (max 200).
if (in_array($key, $companyKeys, true)) {
    if (mb_strlen($value) > 200) $value = mb_substr($value, 0, 200);
}

// Titlul de pe label (text liber, max 100).
if ($key === 'fbe_label_title') {
    if (mb_strlen($value) > 100) $value = mb_substr($value, 0, 100);
}

// Opțiunile de print label (JSON): density, interpolation, rotation, colorType, scaleContent.
if ($key === 'fbe_label_opts') {
    if ($value === '') {
        // gol = reset la default
    } elseif (json_decode($value) === null) {
        json_response(['ok' => false, 'error' => 'fbe_label_opts trebuie să fie JSON valid.'], 422);
    } elseif (mb_strlen($value) > 2000) {
        json_response(['ok' => false, 'error' => 'fbe_label_opts prea mare.'], 422);
    }
}

// Numele imprimantei QZ Tray — text liber (max 255).
if ($key === 'qz_printer') {
    if (mb_strlen($value) > 255) $value = mb_substr($value, 0, 255);
}

// Dimensiuni label (mm) — întreg între 10 și 200.
if ($key === 'fbe_label_w' || $key === 'fbe_label_h') {
    if (!ctype_digit($value)) {
        json_response(['ok' => false, 'error' => 'Dimensiunea trebuie să fie un număr întreg.'], 422);
    }
    $v = (int)$value;
    if ($v < 10)  $v = 10;
    if ($v > 200) $v = 200;
    $value = (string)$v;
}

if ($key === 'vat_rate') {
    $value = str_replace(',', '.', $value); // acceptă virgulă zecimală
    if ($value === '' || !is_numeric($value)) {
        json_response(['ok' => false, 'error' => 'Cota TVA trebuie să fie un număr (ex: 21).'], 422);
    }
    $rate = (float)$value;
    if ($rate < 0 || $rate > 100) {
        json_response(['ok' => false, 'error' => 'Cota TVA trebuie să fie între 0 și 100.'], 422);
    }
    // Normalizează: max 2 zecimale, fără zerouri inutile
    $value = rtrim(rtrim(number_format($rate, 2, '.', ''), '0'), '.');
    if ($value === '') $value = '0';
}

try {
    setting_set($key, $value);
    json_response(['ok' => true, 'key' => $key, 'value' => $value]);
} catch (Throwable $e) {
    error_log('[save-setting] ' . $e->getMessage());
    json_response(['ok' => false, 'error' => 'Eroare DB: ' . $e->getMessage()], 500);
}
