<?php
/**
 * POST /api/revert-session.php
 *
 * Restaurează `new_title` la valoarea `old_title` (snapshot luat la adăugarea
 * în sesiune). Util când ai aplicat un template care nu e bun și vrei să revii.
 *
 * IMPORTANT: NU rollback pe eMAG. Dacă produsele au fost deja trimise la eMAG
 * cu noul titlu, după revert trebuie să apeși „Re-trimite" pe ele ca să trimiți
 * vechiul titlu înapoi la eMAG.
 *
 * Body:
 *   session_id = N
 *   item_ids[] = opțional; dacă lipsește, revert pe TOȚI itemii sesiunii
 *
 * Răspuns: { ok, reverted }
 */
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);
if ($sessionId <= 0) {
    json_response(['ok' => false, 'error' => 'session_id invalid'], 422);
}

$itemIds = $_POST['item_ids'] ?? null;
$idsFilter = '';
$idsParams = [];
if (is_array($itemIds) && $itemIds) {
    $itemIds = array_values(array_filter(array_map('intval', $itemIds), fn($v) => $v > 0));
    if ($itemIds) {
        $ph = implode(',', array_fill(0, count($itemIds), '?'));
        $idsFilter = " AND id IN ($ph)";
        $idsParams = $itemIds;
    }
}

// Flag opțional: când e true, resetăm și itemii success la pending
// (folosit pentru „Revert all + sync eMAG" — push-ul rollback va include și success-urile)
$resetSuccess = !empty($_POST['reset_success']);

try {
    // CASE pentru status: failed → pending întotdeauna; success → pending DOAR dacă reset_success=1
    $statusUpdate = $resetSuccess
        ? "CASE WHEN sent_status IN ('failed', 'success') THEN 'pending' ELSE sent_status END"
        : "CASE WHEN sent_status = 'failed' THEN 'pending' ELSE sent_status END";

    $affected = db_exec(
        "UPDATE title_session_items
         SET new_title = COALESCE(old_title, ''),
             sent_status = $statusUpdate,
             error_message = NULL
         WHERE session_id = ?
           AND old_title IS NOT NULL
           $idsFilter",
        array_merge([$sessionId], $idsParams)
    );

    // Returnez și itemii actualizați pentru update local pe frontend
    $items = db_select(
        "SELECT id, new_title, sent_status, error_message
         FROM title_session_items
         WHERE session_id = ? $idsFilter",
        array_merge([$sessionId], $idsParams)
    );

    json_response([
        'ok'       => true,
        'reverted' => $affected,
        'items'    => $items,
    ]);
} catch (Throwable $ex) {
    error_log('[revert-session] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => $ex->getMessage()], 500);
}
