<?php
/**
 * Helperi pentru sesiunile de recepție FBE.
 *
 * O sesiune (fbe_receptions) are o listă de produse (fbe_reception_items) cu
 * cantitatea SETATĂ PE SESIUNE (coloana qty din items) — nu pe produs. Fiecare
 * sesiune își are propriile bucăți, independent de celelalte sesiuni.
 */

require_once __DIR__ . '/db.php';

/**
 * Rândul sesiunii + contoare (nr. EAN-uri și total bucăți).
 */
function reception_row(int $id): ?array
{
    $row = db_select(
        "SELECT r.*,
                (SELECT COUNT(*) FROM fbe_reception_items WHERE reception_id = r.id) AS items_count,
                (SELECT COALESCE(SUM(qty),0) FROM fbe_reception_items WHERE reception_id = r.id) AS total_qty
         FROM fbe_receptions r WHERE r.id = ?",
        [$id]
    )[0] ?? null;
    return $row ?: null;
}

/**
 * Items-urile unei sesiuni, în ordine, îmbogățite cu datele produsului
 * (nume curent, PNK, model telefon, buc/cutie, stoc curent FBE).
 *
 * Stocul FBE = `current_stock` al produsului cu același EAN dintr-un cont
 * marcat `is_fbe = 1` (citit de pe eMAG la ultimul sync).
 */
function reception_items(int $id): array
{
    return db_select(
        "SELECT i.id, i.position, i.ean, i.qty, i.product_id, i.product_name,
                i.packed, i.packed_qty,
                p.pnk, p.units_per_box, p.phone_series_id,
                p.custom_name, p.product_name AS live_name,
                (SELECT pb.name || ' ' || pm.name || ' ' || ps.name
                 FROM phone_series ps
                 JOIN phone_models pm ON pm.id = ps.model_id
                 JOIN phone_brands pb ON pb.id = pm.brand_id
                 WHERE ps.id = p.phone_series_id) AS phone_label,
                (SELECT pf.current_stock FROM products pf
                 JOIN emag_accounts af ON af.id = pf.emag_account_id
                 WHERE af.is_fbe = 1 AND pf.ean IS NOT NULL AND pf.ean = i.ean
                 ORDER BY pf.id LIMIT 1) AS fbe_stock
         FROM fbe_reception_items i
         LEFT JOIN products p ON p.id = i.product_id
         WHERE i.reception_id = ?
         ORDER BY i.position ASC, i.id ASC",
        [$id]
    );
}

/**
 * Sesiunea + items, gata de trimis în JSON către UI.
 */
function reception_with_items(int $id): ?array
{
    $row = reception_row($id);
    if (!$row) return null;
    $row['items'] = reception_items($id);
    return $row;
}

/**
 * Următoarea poziție liberă din listă.
 */
function reception_next_position(int $receptionId): int
{
    return (int)db_scalar(
        "SELECT COALESCE(MAX(position), -1) + 1 FROM fbe_reception_items WHERE reception_id = ?",
        [$receptionId]
    );
}

/**
 * Normalizează o cantitate primită din UI.
 * Gol/null → null (fără cantitate). Altfel întreg în [0, 65535].
 */
function reception_normalize_qty($raw): ?int
{
    if ($raw === null) return null;
    $s = trim((string)$raw);
    if ($s === '') return null;
    if (!preg_match('/^\d+$/', $s)) return null;
    $n = (int)$s;
    return $n > 65535 ? 65535 : $n;
}
