<?php
/**
 * POST /api/save-price-range.php
 *
 * Modifică intervalul de preț permis (min/max sale price) al unei oferte.
 *
 * Body: id, min_sale_price, max_sale_price
 *
 * Spre deosebire de prețul de vânzare (care se salvează local și se trimite
 * separat), intervalul se trimite la eMAG ÎN ACELAȘI request: valoarea are sens
 * doar dacă eMAG a acceptat-o — ea e cea față de care API-ul validează apoi
 * orice `sale_price`. Scriem în DB doar după un răspuns OK, ca să nu afișăm un
 * interval care pe eMAG e de fapt altul.
 *
 * Reguli (docs v4.5.1, product_offer/save): ambele > 0, fără TVA, maximum 4
 * zecimale, iar max_sale_price trebuie să fie strict mai mare decât min.
 */
require_once __DIR__ . '/../includes/db.php';
require_once __DIR__ . '/../includes/emag-api.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ă o valoare de preț: acceptă virgulă zecimală, rotunjește la 4 zecimale. */
function parse_range_price(string $label, $raw): float
{
    $s = str_replace(',', '.', trim((string)$raw));
    if ($s === '' || !is_numeric($s)) {
        json_response(['ok' => false, 'error' => "$label lipsește sau e invalid"], 422);
    }
    $v = round((float)$s, 4);
    if ($v <= 0) {
        json_response(['ok' => false, 'error' => "$label trebuie să fie mai mare decât 0"], 422);
    }
    if ($v > 999999) {
        json_response(['ok' => false, 'error' => "$label e prea mare"], 422);
    }
    return $v;
}

$min = parse_range_price('Prețul minim', $_POST['min_sale_price'] ?? '');
$max = parse_range_price('Prețul maxim', $_POST['max_sale_price'] ?? '');

if ($max <= $min) {
    json_response(['ok' => false, 'error' => 'Prețul maxim trebuie să fie mai mare decât cel minim.'], 422);
}

$rows = db_select(
    "SELECT p.id, p.emag_id, p.product_name,
            a.username, a.password, a.platform, a.is_active
     FROM products p
     LEFT JOIN emag_accounts a ON a.id = p.emag_account_id
     WHERE p.id = ?",
    [$id]
);
if (!$rows) {
    json_response(['ok' => false, 'error' => 'Produs inexistent'], 404);
}
$p = $rows[0];

if (empty($p['emag_id'])) {
    json_response(['ok' => false, 'error' => 'Produsul nu are emag_id — nu poate fi identificat pe eMAG.'], 422);
}
if (empty($p['username']) || (int)$p['is_active'] !== 1) {
    json_response(['ok' => false, 'error' => 'Contul eMAG al produsului lipsește sau e inactiv.'], 422);
}

try {
    $api = new EmagAPI($p['username'], $p['password'], $p['platform'] ?? 'ro');
    $res = $api->updateOfferPriceRange([
        'id'             => (int)$p['emag_id'],
        'min_sale_price' => $min,
        'max_sale_price' => $max,
    ]);
} catch (Throwable $e) {
    error_log('[save-price-range] ' . $e->getMessage());
    json_response(['ok' => false, 'error' => $e->getMessage()], 502);
}

if (!$res['ok']) {
    json_response(['ok' => false, 'error' => $res['message']], 502);
}

try {
    db_exec(
        "UPDATE products SET min_sale_price = ?, max_sale_price = ? WHERE id = ?",
        [$min, $max, $id]
    );
    $row = db_select(
        "SELECT id, sale_price, current_sale_price, min_sale_price, max_sale_price, currency, price_synced_at
         FROM products WHERE id = ?",
        [$id]
    );
    json_response(['ok' => true, 'product' => $row[0] ?? null]);
} catch (Throwable $ex) {
    error_log('[save-price-range] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => 'Trimis la eMAG, dar salvarea locală a eșuat: ' . $ex->getMessage()], 500);
}
