<?php
/**
 * POST /api/cod-produs-sync.php
 *
 * Împinge „cod produs" (part_number) de pe contul normal pe produsul
 * corespunzător de pe contul FBE, via resursa `product_offer/save`.
 *
 * Body:
 *   - normal_product_id (int) — id-ul produsului din aplicație (cont normal),
 *     din care se ia codul sursă.
 *   - fbe_product_id (int) — id-ul produsului din aplicație (cont FBE), a cărui
 *     ofertă se actualizează.
 *
 * La succes, actualizează products.emag_part_number pentru produsul FBE.
 */
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);
}

$normalId = (int)($_POST['normal_product_id'] ?? 0);
$fbeId    = (int)($_POST['fbe_product_id'] ?? 0);
if ($normalId <= 0 || $fbeId <= 0) {
    json_response(['ok' => false, 'error' => 'normal_product_id și fbe_product_id sunt obligatorii'], 422);
}

// Codul sursă (de pe contul normal).
$src = db_select(
    "SELECT p.id, p.emag_part_number, a.is_fbe
     FROM products p LEFT JOIN emag_accounts a ON a.id = p.emag_account_id
     WHERE p.id = ?",
    [$normalId]
);
if (!$src) {
    json_response(['ok' => false, 'error' => 'Produsul sursă (normal) nu există'], 404);
}
$src = $src[0];
$code = trim((string)($src['emag_part_number'] ?? ''));
if ($code === '') {
    json_response(['ok' => false, 'error' => 'Produsul normal nu are cod produs de trimis'], 422);
}

// Ținta (produsul FBE) + credențialele contului ei.
$dst = db_select(
    "SELECT p.id, p.emag_id, p.emag_part_number,
            a.username, a.password, a.platform, a.is_active, a.is_fbe
     FROM products p LEFT JOIN emag_accounts a ON a.id = p.emag_account_id
     WHERE p.id = ?",
    [$fbeId]
);
if (!$dst) {
    json_response(['ok' => false, 'error' => 'Produsul țintă (FBE) nu există'], 404);
}
$dst = $dst[0];

if ((int)$dst['is_fbe'] !== 1) {
    json_response(['ok' => false, 'error' => 'Produsul țintă nu aparține unui cont FBE'], 422);
}
if (empty($dst['emag_id'])) {
    json_response(['ok' => false, 'error' => 'Produsul FBE nu are emag_id — nu poate fi identificat pe eMAG.'], 422);
}
if (empty($dst['username']) || (int)$dst['is_active'] !== 1) {
    json_response(['ok' => false, 'error' => 'Contul FBE lipsește sau e inactiv.'], 422);
}

// Nimic de făcut dacă deja coincid.
if (trim((string)$dst['emag_part_number']) === $code) {
    json_response(['ok' => true, 'skipped' => true, 'code' => $code, 'message' => 'Codul era deja identic.']);
}

try {
    $api = new EmagAPI($dst['username'], $dst['password'], $dst['platform'] ?? 'ro');
    $res = $api->updateProductPartNumber([
        'id'          => (int)$dst['emag_id'],
        'part_number' => $code,
    ]);
} catch (Throwable $e) {
    error_log('[cod-produs-sync] ' . $e->getMessage());
    json_response(['ok' => false, 'error' => $e->getMessage()], 502);
}

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

db_exec(
    "UPDATE products SET emag_part_number = ? WHERE id = ?",
    [$code, $fbeId]
);

json_response(['ok' => true, 'code' => $code, 'fbe_product_id' => $fbeId]);
