import { useEffect, useMemo, useState } from "preact/hooks";
import "../../styles/offers/offers-table.css"; //
const BUILDING_MAP = {
jednorodzinny: 1,
wielorodzinny: 2,
};
const CONTRACT_MAP = {
"24m": 1,
bezterminowa: 2,
};
export default function JamboxBasePackages({
source = "PLUS",
title,
selected = {},
}) {
const [packages, setPackages] = useState([]);
const [loading, setLoading] = useState(true);
const [error, setError] = useState("");
// wyliczamy kody na podstawie tego samego selected, którego używasz w OffersCards
const buildingCode = useMemo(() => {
const val = selected?.budynek;
return BUILDING_MAP[val] ?? 1; // domyślnie jednorodzinny
}, [selected?.budynek]);
const contractCode = useMemo(() => {
const val = selected?.umowa;
return CONTRACT_MAP[val] ?? 1; // domyślnie 24m
}, [selected?.umowa]);
useEffect(() => {
let cancelled = false;
async function load() {
setLoading(true);
setError("");
try {
const params = new URLSearchParams();
if (source && source !== "ALL") {
params.set("source", source);
}
if (buildingCode) {
params.set("building", String(buildingCode));
}
if (contractCode) {
params.set("contract", String(contractCode));
}
const query = params.toString();
const url = `/api/jambox/base-packages${query ? `?${query}` : ""}`;
const res = await fetch(url);
if (!res.ok) {
throw new Error(`HTTP ${res.status}`);
}
const json = await res.json();
if (!cancelled) {
setPackages(Array.isArray(json.data) ? json.data : []);
}
} catch (err) {
console.error("Błąd pobierania pakietów JAMBOX:", err);
if (!cancelled) {
setError("Nie udało się załadować pakietów JAMBOX.");
}
} finally {
if (!cancelled) {
setLoading(false);
}
}
}
load();
return () => {
cancelled = true;
};
}, [source, buildingCode, contractCode]);
const effectiveTitle =
title ||
(source === "PLUS"
? "Pakiety podstawowe JAMBOX PLUS"
: source === "EVIO"
? "Pakiety podstawowe JAMBOX EVIO"
: "Pakiety podstawowe JAMBOX");
if (loading) {
return (
Ładowanie pakietów... {error} Brak pakietów do wyświetlenia.{effectiveTitle}
{effectiveTitle}
{effectiveTitle}
{effectiveTitle}
}