import SectionAccordion from "./SectionAccordion.jsx"; import { money } from "../../../lib/money.js"; import { hasTvTermPricing, getAddonUnitPrice } from "../../../lib/offer-pricing.js"; export default function TvAddonsSection({ open, onToggle, cenaOpis, pkg, tvAddonsVisible = [], selectedQty, setSelectedQty, tvTerm, setTvTerm, tvAddonsPrice, tvAddonsTitle = "Pakiety premium", }) { const toggleCheckboxAddon = (addon) => { setSelectedQty((prev) => { const next = { ...prev }; const isOn = (next[addon.id] || 0) > 0; const willTurnOn = !isOn; // ✅ jeśli grupa "single" i włączamy -> wyłącz inne z tej grupy if (willTurnOn && addon.group && addon.group_mode === "single") { for (const a of tvAddonsVisible) { if (a.id !== addon.id && a.group === addon.group) { next[a.id] = 0; } } } // toggle bieżącego next[addon.id] = willTurnOn ? 1 : 0; return next; }); }; const setQtyAddon = (id, qty, min, max) => { const safe = Math.max(min, Math.min(max, qty)); setSelectedQty((prev) => ({ ...prev, [id]: safe })); }; const renderRow = (a) => { const qty = Number(selectedQty[a.id] || 0); const isQty = a.typ === "quantity" || a.ilosc === true; const termPricing = hasTvTermPricing(a, pkg); const term = tvTerm[a.id] || "12m"; const unit = getAddonUnitPrice(a, pkg, termPricing ? term : null); if (!isQty) { return ( ); } const min = Number.isFinite(a.min) ? a.min : 0; const max = Number.isFinite(a.max) ? a.max : 10; const step = Number.isFinite(a.krok) ? a.krok : 1; const lineTotal = qty * unit; return (
{a.nazwa}
{a.opis &&
{a.opis}
}
e.stopPropagation()}> {qty}
{money(unit)} {cenaOpis}
{qty > 0 ? `${money(lineTotal)} ${cenaOpis}` : "—"}
); }; return (
{tvAddonsPrice ? `${money(tvAddonsPrice)} ${cenaOpis}` : "—"}} open={open} onToggle={onToggle} > {tvAddonsVisible.length === 0 ? (

Brak pakietów dodatkowych TV.

) : (
{tvAddonsVisible.map(renderRow)}
)}
); }