<?php
/**
 * POST /api/exclude.php
 *
 * Mută unul sau mai multe produse în lista de EAN-uri excluse.
 * Body suportă două moduri:
 *
 *   1) Din pagina Produse: ids[]=1&ids[]=2&reason=…
 *      → pentru fiecare produs ia EAN-ul, inserează în excluded_eans, șterge produsul.
 *      → produsele fără EAN sunt ignorate (raportate ca skipped_no_ean).
 *
 *   2) Manual din pagina Excluse: eans[]=5901234123457&eans[]=…&reason=…
 *      → inserează direct EAN-urile.
 *      → opțional product_name la fiecare (eans_meta JSON map ean→name).
 */
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);
}

$reason = trim((string)($_POST['reason'] ?? '')) ?: null;
$result = [
    'ok'                => true,
    'excluded_added'    => 0,
    'already_excluded'  => 0,
    'products_deleted'  => 0,
    'skipped_no_ean'    => 0,
];

try {
    $pdo = db();
    $pdo->beginTransaction();

    $insStmt = $pdo->prepare(
        "INSERT OR IGNORE INTO excluded_eans (ean, product_name, reason) VALUES (?,?,?)"
    );
    $delStmt = $pdo->prepare("DELETE FROM products WHERE id = ?");

    // Mod 1: din IDs produse
    $ids = $_POST['ids'] ?? [];
    if (is_array($ids) && $ids) {
        $ids = array_values(array_filter(array_map('intval', $ids), fn($v) => $v > 0));
        if ($ids) {
            $ph = implode(',', array_fill(0, count($ids), '?'));
            $rows = db_select("SELECT id, ean, product_name FROM products WHERE id IN ($ph)", $ids);
            foreach ($rows as $r) {
                $ean = trim((string)$r['ean']);
                if ($ean === '') {
                    $result['skipped_no_ean']++;
                    continue;
                }
                $insStmt->execute([$ean, $r['product_name'], $reason]);
                if ($insStmt->rowCount() > 0) {
                    $result['excluded_added']++;
                } else {
                    $result['already_excluded']++;
                }
                $delStmt->execute([$r['id']]);
                $result['products_deleted'] += $delStmt->rowCount();
            }
        }
    }

    // Mod 2: EAN-uri direct
    $eans = $_POST['eans'] ?? [];
    if (is_array($eans) && $eans) {
        // eans_meta opțional: JSON {"<ean>": "<numeProdus>"}
        $meta = [];
        if (!empty($_POST['eans_meta'])) {
            $decoded = json_decode((string)$_POST['eans_meta'], true);
            if (is_array($decoded)) $meta = $decoded;
        }
        foreach ($eans as $e) {
            $ean = trim((string)$e);
            if ($ean === '') continue;
            $name = isset($meta[$ean]) ? trim((string)$meta[$ean]) : null;
            $insStmt->execute([$ean, $name ?: null, $reason]);
            if ($insStmt->rowCount() > 0) {
                $result['excluded_added']++;
                // Șterg și produsul cu acest EAN dacă există
                $affected = db_exec("DELETE FROM products WHERE ean = ?", [$ean]);
                $result['products_deleted'] += $affected;
            } else {
                $result['already_excluded']++;
            }
        }
    }

    $pdo->commit();
    json_response($result);
} catch (Throwable $ex) {
    if (db()->inTransaction()) db()->rollBack();
    error_log('[exclude] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => $ex->getMessage()], 500);
}
