<?php
/**
 * POST /api/add-to-session.php
 *
 * Adaugă unul sau mai multe produse într-o sesiune.
 * Pentru fiecare produs ia un snapshot al numelui curent + datele necesare
 * pentru push la eMAG (id, ean, part_number, pnk).
 *
 * Body:
 *   session_id  = N (sesiune existentă)
 *   product_ids[] = array
 *   new_title_mode = 'keep' | 'custom_if_set' | 'manual'
 *      keep          = new_title = numele curent (afișat) — utilizatorul îl editează manual după
 *      custom_if_set = new_title = custom_name dacă există, altfel product_name
 *      manual        = new_title = șir gol (user îl completează în UI)
 *
 * Răspuns: { ok, added, skipped }
 */
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);
}

$sessionId   = (int)($_POST['session_id'] ?? 0);
$productIds  = $_POST['product_ids'] ?? [];
$mode        = $_POST['new_title_mode'] ?? 'custom_if_set';

if ($sessionId <= 0) {
    json_response(['ok' => false, 'error' => 'session_id lipsește'], 422);
}
if (!is_array($productIds) || !$productIds) {
    json_response(['ok' => false, 'error' => 'product_ids lipsesc'], 422);
}
$productIds = array_values(array_filter(array_map('intval', $productIds), fn($v) => $v > 0));
if (!$productIds) {
    json_response(['ok' => false, 'error' => 'ID-uri invalide'], 422);
}

// Verifică sesiunea
$session = db_select("SELECT id, status FROM title_sessions WHERE id = ?", [$sessionId]);
if (!$session) {
    json_response(['ok' => false, 'error' => 'Sesiune inexistentă'], 404);
}
// Permitem adăugare în ORICE sesiune cu excepția 'sending' (în curs de procesare).
// Sesiunile completed/failed/partial primesc itemi noi → status va fi recalculat la final.
if ($session[0]['status'] === 'sending') {
    json_response(['ok' => false, 'error' => 'Sesiunea este în curs de trimitere la eMAG — așteaptă finalizarea.'], 409);
}

try {
    $ph = implode(',', array_fill(0, count($productIds), '?'));
    $products = db_select(
        "SELECT id, product_name, custom_name, emag_id, ean, emag_part_number, pnk
         FROM products WHERE id IN ($ph)",
        $productIds
    );

    $added = 0;
    $skipped = 0;
    $stmt = db()->prepare(
        "INSERT OR IGNORE INTO title_session_items
         (session_id, product_id, old_title, emag_id, ean, part_number, pnk, new_title)
         VALUES (?, ?, ?, ?, ?, ?, ?, ?)"
    );

    foreach ($products as $p) {
        $currentDisplay = $p['custom_name'] ?: $p['product_name'];
        switch ($mode) {
            case 'keep':           $newTitle = $currentDisplay; break;
            case 'custom_if_set':  $newTitle = $currentDisplay; break;
            case 'manual':         $newTitle = ''; break;
            default:               $newTitle = $currentDisplay;
        }
        $stmt->execute([
            $sessionId, $p['id'], $currentDisplay,
            $p['emag_id'], $p['ean'], $p['emag_part_number'], $p['pnk'],
            $newTitle
        ]);
        if ($stmt->rowCount() > 0) $added++;
        else $skipped++;
    }

    // Recalculez status-ul sesiunii: completed → draft/partial când primește pending nou
    $newStatus = calculate_session_status($sessionId);
    db_exec("UPDATE title_sessions SET status = ? WHERE id = ?", [$newStatus, $sessionId]);

    json_response([
        'ok' => true,
        'added' => $added,
        'skipped' => $skipped,
        'session_status' => $newStatus,
    ]);
} catch (Throwable $ex) {
    error_log('[add-to-session] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => $ex->getMessage()], 500);
}
