<?php
/**
 * POST /api/related-series.php
 *
 * Returnează lista de phone_series_id "compatibile" pe baza istoricului:
 * pentru un series_id dat, găsește toate produsele care îl au legat
 * (ca primary SAU ca secondary), apoi colectează celelalte serii ale acelor
 * produse și le returnează ca sugestii.
 *
 * Exemplu:
 *   Product A: primary=iPhone 13 Pro, alts=[iPhone 13, iPhone 14]
 *   Product B: primary=iPhone 13 Pro, alts=[iPhone 12 Pro, iPhone 14 Pro]
 *   Query cu series_id = iPhone 13 Pro:
 *   → returnează [iPhone 13, iPhone 14, iPhone 12 Pro, iPhone 14 Pro]
 *
 * Body: series_id (int)
 * Response: { ok, related: [int, ...] }
 */
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);
}

$seriesId = (int)($_POST['series_id'] ?? 0);
$excludeProductId = (int)($_POST['exclude_product_id'] ?? 0); // opțional: nu lua în calcul propriul produs

if ($seriesId <= 0) {
    json_response(['ok' => false, 'error' => 'series_id invalid'], 422);
}

try {
    // Pas 1: găsesc toate produsele care conțin această serie (primary sau alt)
    $excludeClause = $excludeProductId > 0 ? ' AND id != ?' : '';
    $excludeParams = $excludeProductId > 0 ? [$excludeProductId] : [];

    $products = db_select(
        "SELECT DISTINCT id FROM (
            SELECT id FROM products WHERE phone_series_id = ?
            UNION
            SELECT product_id AS id FROM product_phone_series_alt WHERE phone_series_id = ?
         )
         WHERE 1=1 $excludeClause",
        array_merge([$seriesId, $seriesId], $excludeParams)
    );

    if (!$products) {
        json_response(['ok' => true, 'related' => []]);
    }

    $productIds = array_column($products, 'id');
    $ph = implode(',', array_fill(0, count($productIds), '?'));

    // Pas 2: colectez toate seriile distincte ale acestor produse, exclus seria inițială
    $rows = db_select(
        "SELECT DISTINCT series_id FROM (
            SELECT phone_series_id AS series_id FROM products
              WHERE id IN ($ph) AND phone_series_id IS NOT NULL
            UNION
            SELECT phone_series_id AS series_id FROM product_phone_series_alt
              WHERE product_id IN ($ph)
         )
         WHERE series_id != ?",
        array_merge($productIds, $productIds, [$seriesId])
    );

    json_response([
        'ok'      => true,
        'related' => array_map('intval', array_column($rows, 'series_id')),
    ]);
} catch (Throwable $ex) {
    error_log('[related-series] ' . $ex->getMessage());
    json_response(['ok' => false, 'error' => $ex->getMessage()], 500);
}
