File size: 14,191 Bytes
a667b81 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 | import React, { useState } from "react";
import { motion, AnimatePresence } from "motion/react";
import {
HelpCircle,
ChevronDown,
ShieldCheck,
Wrench,
Clock,
Search,
BadgeHelp,
Tag
} from "lucide-react";
interface FAQItem {
id: string;
question: string;
answer: string;
keywords: string[];
category: "warranty" | "services" | "general";
}
interface FAQSectionProps {
darkMode: boolean;
}
export default function FAQSection({ darkMode }: FAQSectionProps) {
const [openId, setOpenId] = useState<string | null>("warranty-duration");
const [filterCategory, setFilterCategory] = useState<"all" | "warranty" | "services">("all");
const [searchQuery, setSearchQuery] = useState("");
const FAQS: FAQItem[] = [
{
id: "warranty-duration",
question: "What official warranty is provided with premium imported tyres from Yokohama, Michelin, and Continental?",
answer: "All premium brand tyres (including Yokohama, Michelin, and Continental) purchased from Haider Brothers Faisal Town come with a 5-Year Continuous Structural & Tread Warranty. This warranty protects against tread separation, structural defects, factory compounds failures, and early bulging under standard driving specifications. We assist with 100% genuine claims fast-tracked directly with manufacturer dealers without complications.",
keywords: ["warranty Yokohama", "Michelin warranty", "Continental tyres Lahore", "imported tyre warranty"],
category: "warranty"
},
{
id: "tire-installation-benefits",
question: "Is there a charge for tyre installation, computerized balancing, and nitrogen air filling in Faisal Town showroom?",
answer: "No, tyre installation at our Faisal Town showroom is 100% free with the purchase of any tyre set. For seasonal promotional packages or sets of 4 premium tyres, we include computerized 3D wheel alignment, premium computerized wheel balancing, durable tubeless valves, and lifetime nitrogen gas top-up sessions absolutely free. No hidden service charges apply.",
keywords: ["free tyre installation", "3D wheel alignment", "wheel balancing Faisal Town", "free nitrogen Lahore"],
category: "services"
},
{
id: "checking-dot-year",
question: "How can I verify the genuine manufacturing year and DOT marking of tyres purchased at Haider Brothers?",
answer: "We guarantee 100% authentic tyre imports with visible, untouched DOT stamps. The DOT code is a 4-digit code hot-stamped on the tire sidewall; the first two digits represent the manufacturing week, and the last two represent the year (e.g., '1226' means 12th week of 2026). Haider Brothers never stocks smuggled or expired stock, securing complete legal peace of mind with legal custom imports.",
keywords: ["tyre manufacturing year", "how to read DOT markings", "genuine imported tyres", "fresh tyre stock Lahore"],
category: "warranty"
},
{
id: "pothole-road-hazard",
question: "Does the warranty cover tyre punctures, roadside sidewall cuts, or pothole impact damage?",
answer: "Official manufacturer structural warranties cover material defects and manufacturing flaws. Road hazards such as standard tyre punctures, impact damage from deep Lahore potholes, sidewall kerb cuts, or debris damage are not traditionally covered under standard structural warranty terms. However, we offer premium tyre repair and patching services at our showroom anytime, or immediate tyre roadside replacements via our emergency van.",
keywords: ["pothole tyre damage warranty", "sidewall cuts repair Lahore", "tire puncture service", "road hazard assistance"],
category: "warranty"
},
{
id: "emergency-road-service",
question: "What should I do if my sedan tire bursts late at night in Lahore? Do you offer 24/7 emergency roadside support?",
answer: "Yes, Haider Brothers operates a dedicated 24 Hours Emergency Roadside Tyre Assistance service. If you encounter a flat tire, puncture, or rim issue late at night anywhere around Faisal Town, Model Town, Gulberg, Johar Town, or Garden Town, call our emergency hotline at +92 302 4594403 immediately. Our responsive mobile service van will dispatch with fresh stock to assist on-site.",
keywords: ["24/7 tyre repair Lahore", "midnight flat tire recovery", "emergency roadside assistance", "mobile tire van Faisal Town"],
category: "services"
},
{
id: "alignment-frequency",
question: "How often should I get computerized 3D wheel alignment checks and wheel balancing for Pakistani roads?",
answer: "For Pakistani road terrains, we strongly recommend a computerized 3D wheel alignment and professional wheel balancing check every 8,000 to 10,000 Kilometers, or whenever you feel alignment pulling to one side. Regular alignments prevent premature tread wear (uneven tire scrubbing), keep steering vibration-free on motorways at high speeds, and optimize vehicle fuel economy.",
keywords: ["computerized wheel alignment frequency", "tire balancing intervals", "how to prevent uneven tire wear", "Pakistani road maintenance"],
category: "services"
}
];
const toggleFAQ = (id: string) => {
setOpenId((prev) => (prev === id ? null : id));
};
// Filter and search logic for great SEO reach
const filteredFAQs = FAQS.filter((faq) => {
const categoryMatches = filterCategory === "all" || faq.category === filterCategory;
const searchString = `${faq.question} ${faq.answer} ${faq.keywords.join(" ")}`.toLowerCase();
const queryMatches = searchString.includes(searchQuery.toLowerCase());
return categoryMatches && queryMatches;
});
return (
<section
id="showroom-faqs-accordion"
className="max-w-4xl mx-auto px-4 sm:px-6 lg:px-8 mt-16 pt-12 border-t border-black/5 dark:border-white/5"
>
{/* Schema.org Structured Data Injection for high-fidelity Google SEO relevance */}
<script type="application/ld+json">
{JSON.stringify({
"@context": "https://schema.org",
"@type": "FAQPage",
"mainEntity": FAQS.map((faq) => ({
"@type": "Question",
"name": faq.question,
"acceptedAnswer": {
"@type": "Answer",
"text": faq.answer
}
}))
})}
</script>
<div className="text-center max-w-2xl mx-auto mb-8">
<span className="text-xs font-mono tracking-widest uppercase bg-brand-orange/15 text-brand-orange px-3.5 py-1 rounded-full font-bold inline-flex items-center gap-1.5 shadow-xs">
<BadgeHelp className="w-3.5 h-3.5 animate-pulse" />
<span>Haider Brothers FAQ Hub</span>
</span>
<h2 className="text-2xl sm:text-3.5xl font-display font-black tracking-tight mt-3">
Tire Warranty & Service FAQs
</h2>
<p className={`text-xs sm:text-sm mt-2 leading-relaxed ${darkMode ? "text-slate-400" : "text-slate-600"}`}>
Honest, transparent answers about premium tyre warranties, alignment services, and emergency 24/7 roadside assistances in Faisal Town Lahore.
</p>
</div>
{/* Segment Category Switcher + SEO Search Input */}
<div className="flex flex-col sm:flex-row items-stretch sm:items-center gap-3 justify-between mb-6">
<div className="flex p-1 rounded-xl bg-slate-200/50 dark:bg-black/30 border border-slate-300/30 dark:border-white/5 self-start">
{[
{ id: "all", label: "All Questions" },
{ id: "warranty", label: "🛡️ Warranty" },
{ id: "services", label: "🛠️ Services & 3D Align" }
].map((cat) => (
<button
key={cat.id}
onClick={() => setFilterCategory(cat.id as any)}
className={`px-3 py-1.5 rounded-lg text-xs font-semibold transition-all ${
filterCategory === cat.id
? "bg-brand-orange text-white"
: "text-slate-500 hover:text-slate-800 dark:hover:text-slate-200"
}`}
type="button"
>
{cat.label}
</button>
))}
</div>
{/* Live Search inside FAQ content with key phrases */}
<div className="relative max-w-xs w-full">
<input
type="text"
placeholder="Search FAQs (e.g. alignment, DOT, Michelin)..."
value={searchQuery}
onChange={(e) => setSearchQuery(e.target.value)}
className={`w-full p-2.5 pl-8 text-xs rounded-xl border focus:ring-1 focus:ring-brand-orange focus:outline-hidden ${
darkMode
? "bg-black/35 border-white/10 text-white placeholder-slate-500"
: "bg-white border-slate-200 text-slate-850 placeholder-slate-400"
}`}
/>
<Search className="w-3.5 h-3.5 text-slate-400 absolute left-2.5 top-1/2 -translate-y-1/2" />
</div>
</div>
{/* Accordion List Container */}
{filteredFAQs.length > 0 ? (
<div className="space-y-3.5">
{filteredFAQs.map((faq) => {
const isOpen = openId === faq.id;
return (
<div
key={faq.id}
className={`rounded-2xl border transition-all duration-300 overflow-hidden ${
isOpen
? darkMode
? "bg-[#1c1c24] border-brand-orange/40"
: "bg-white border-brand-orange shadow-md"
: darkMode
? "bg-black/25 border-white/5 hover:border-white/10"
: "bg-white border-slate-200 hover:border-slate-300"
}`}
id={`faq-item-${faq.id}`}
>
{/* Header Interactive Trigger Button */}
<button
onClick={() => toggleFAQ(faq.id)}
className="w-full p-4 sm:p-5 flex items-center justify-between font-sans font-bold text-xs sm:text-sm text-left transition-colors focus:outline-hidden relative group"
aria-expanded={isOpen}
type="button"
>
<div className="flex items-start space-x-3 pr-4">
{faq.category === "warranty" ? (
<ShieldCheck className="w-4 h-4 text-brand-orange mt-0.5 shrink-0" />
) : faq.category === "services" ? (
<Wrench className="w-4 h-4 text-brand-orange mt-0.5 shrink-0" />
) : (
<HelpCircle className="w-4 h-4 text-brand-orange mt-0.5 shrink-0" />
)}
<span className={darkMode ? "text-slate-100 group-hover:text-white" : "text-slate-850 group-hover:text-brand-orange"}>
{faq.question}
</span>
</div>
<span className={`p-1 rounded-lg transition-transform duration-300 ${
isOpen ? "bg-brand-orange/15 text-brand-orange rotate-180" : "text-slate-400 hover:text-slate-600"
}`}>
<ChevronDown className="w-4 h-4 shrink-0" />
</span>
</button>
{/* Smooth Expandable Accordion Body Panels */}
<AnimatePresence initial={false}>
{isOpen && (
<motion.div
initial={{ height: 0, opacity: 0 }}
animate={{ height: "auto", opacity: 1 }}
exit={{ height: 0, opacity: 0 }}
transition={{ duration: 0.25, ease: "easeInOut" }}
>
<div className={`p-4 sm:p-5 pt-0 border-t font-sans text-xs sm:text-[13px] leading-relaxed select-none ${
darkMode ? "border-white/5 text-slate-300" : "border-slate-100 text-slate-700"
}`}>
<p>{faq.answer}</p>
{/* SEO Keyword tags indicator for algorithmic reach */}
<div className="mt-3.5 flex flex-wrap gap-1.5 items-center opacity-80">
<Tag className="w-3 h-3 text-brand-orange shrink-0" />
<span className="text-[10px] font-mono text-slate-400">Related indexes:</span>
{faq.keywords.map((kw, i) => (
<span
key={i}
className="text-[9px] font-mono bg-brand-orange/5 text-brand-orange/80 px-2 py-0.5 rounded-md border border-brand-orange/10"
>
{kw}
</span>
))}
</div>
</div>
</motion.div>
)}
</AnimatePresence>
</div>
);
})}
</div>
) : (
<div className={`p-10 text-center rounded-2xl border border-dashed text-slate-400 ${
darkMode ? "bg-white/5 border-white/10" : "bg-slate-50 border-slate-200"
}`}>
<HelpCircle className="w-8 h-8 mx-auto text-slate-500 mb-2 animate-bounce" />
<h4 className="font-bold text-xs">No matching faq answers found</h4>
<p className="text-[11px] mt-1">Try searching for simple words like "warranty", "3D alignment", or "DOT".</p>
</div>
)}
{/* Extra Service Pledge stamp */}
<div className={`mt-8 p-4 rounded-2xl border text-center font-mono text-[10px] ${
darkMode ? "bg-brand-orange/5 border-brand-orange/10" : "bg-orange-50/50 border-brand-orange/20"
}`}>
<span className="text-brand-orange font-bold font-sans">🛡️ CERTIFIED DIRECT CLAIM GUARANTOR: </span>
<span className={darkMode ? "text-slate-400" : "text-slate-600"}>We deal strictly in direct legal brand imports on all 2026 batches. No duplicate or high wear compounds guaranteed.</span>
</div>
</section>
);
}
|