"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: Parse salary from "30K" or "20000 AED" const parseSalary = (salaryStr: string | undefined): number => { if (!salaryStr) return 0; const cleaned = salaryStr.replace(/\D/g, ""); const number = parseInt(cleaned, 10); return isNaN(number) ? 0 : salaryStr.toUpperCase().includes("K") ? number * 1000 : number; }; // 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 normalize cards from API based on URL query params 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[]) => { const normalized: CreditCard[] = data.map((card) => ({ ...card, minSalary: parseSalary(card.minSalary.toString()), })); setCards(normalized); }) .catch((err) => console.error("API Fetch Error:", err)); }, [bank, type, categoryId]); // Fetch human-readable descriptions for bank, type, category 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]); 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]); 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;