"use client"; import { useEffect, useState } from "react"; import { useSearchParams } from "next/navigation"; import Card from "@/components/customui/Card"; // Interfaces interface Feature { id: number; details: string; } interface Offer { id: number; details: string; } interface CreditCard { id: number; name: string; bankname: string; minSalary: number; annualFee: string; image: string; features: Feature[]; offers: Offer[]; } // Helper: Capitalize first letter and replace dashes with spaces const formatLabelFallback = (str: string) => str.charAt(0).toUpperCase() + str.slice(1).replace(/-/g, " "); const Page = () => { const searchParams = useSearchParams(); const bank = searchParams.get("bank"); const type = searchParams.get("type"); const categoryId = searchParams.get("category"); const [cards, setCards] = useState([]); const [bankName, setBankName] = useState(null); const [typeName, setTypeName] = useState(null); const [categoryName, setCategoryName] = useState(null); // Fetch and set cards from API useEffect(() => { const query = new URLSearchParams(); if (bank) query.append("bank", bank); if (type) query.append("type", type); if (categoryId) query.append("category", categoryId); fetch(`/api/cardlists?${query.toString()}`) .then((res) => res.json()) .then((data: CreditCard[]) => { setCards(data); }) .catch((err) => console.error("API Fetch Error:", err)); }, [bank, type, categoryId]); // Fetch human-readable bank name useEffect(() => { if (bank) { fetch(`/api/banks?code=${bank}`) .then((res) => res.json()) .then((data: { description?: string }) => setBankName(data.description || formatLabelFallback(bank)) ) .catch(() => setBankName(formatLabelFallback(bank))); } else { setBankName(null); } }, [bank]); // Fetch human-readable type name useEffect(() => { if (type) { fetch(`/api/types?code=${type}`) .then((res) => res.json()) .then((data: { description?: string }) => setTypeName(data.description || formatLabelFallback(type)) ) .catch(() => setTypeName(formatLabelFallback(type))); } else { setTypeName(null); } }, [type]); // Fetch human-readable category name useEffect(() => { if (categoryId) { fetch(`/api/categories?code=${categoryId}`) .then((res) => res.json()) .then((data: { description?: string }) => setCategoryName(data.description || formatLabelFallback(categoryId)) ) .catch(() => setCategoryName(formatLabelFallback(categoryId))); } else { setCategoryName(null); } }, [categoryId]); // Breadcrumbs generation const getBreadcrumb = () => { const crumbs = ["Home", "Credit Card"]; if (bankName) crumbs.push(bankName); if (typeName) crumbs.push(typeName); if (categoryName) crumbs.push(categoryName); return crumbs.join(" > "); }; // Dynamic heading generation const getHeading = () => { if (categoryName) return `Top ${categoryName} Credit Cards in UAE`; if (typeName) return `Top ${typeName} Credit Cards in UAE`; if (bankName) return `Top Credit Cards from ${bankName} in UAE`; return "Most Popular Credit Cards in UAE"; }; return (
{/* Breadcrumbs */}
{getBreadcrumb()}
{/* Dynamic Heading */}

{getHeading()}

{/* Cards List */} {cards.length === 0 ? (

No cards available.

) : (
{cards.map((card, index) => ( ))}
)}
); }; export default Page;