"use client"; import { useState } from "react"; import { usePathname, useRouter, useSearchParams } from "next/navigation"; import { ArrowRight, ChartNoAxesCombined, Database, ListChecks, } from "lucide-react"; import { Button } from "@/components/ui/button"; import { FUNNEL_METINLERI } from "@/lib/funnel-metinleri"; import { TypingAnimation } from "@/components/ui/typing-animation"; import { SIHIRBAZ_AC_EVENT, sonucHref } from "@/features/sihirbaz/sihirbaz-sabitler"; import { profilToplamaAc, useTercihProfili, } from "@/features/liste/hooks/use-tercih-profili"; /** Fisher-Yates ile kopya üzerinde karıştırır; her açılışta farklı sıra. */ function karistir(dizi: readonly T[]): T[] { const kopya = [...dizi]; for (let i = kopya.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [kopya[i], kopya[j]] = [kopya[j], kopya[i]]; } return kopya; } const KANITLAR = [ { ikon: ListChecks, etiket: "24 tercih" }, { ikon: ChartNoAxesCombined, etiket: "Risk analizi" }, { ikon: Database, etiket: "YÖK Atlas verisi" }, ]; /** * Arama modalının açılış ekranında yaşayan satın alım funnel kartı. * Rastgele sırayla yazılıp silinen funnel metinleriyle adayı sihirbaza * iter: /sonuc üzerindeyse oradaki orkestratörü olayla açar, başka * sayfadaysa profile göre /sonuc'a (sihirbaz açık) yönlendirir ya da * sıralama kapısını açar. Modal yalnızca açıkken mount olduğundan * karıştırma her açılışta yenilenir ve hydration sorunu yaratmaz. */ export function AramaFunnelKarti({ onSec }: { onSec: () => void }) { const router = useRouter(); const pathname = usePathname(); const searchParams = useSearchParams(); const profil = useTercihProfili(); const [metinler] = useState(() => karistir(FUNNEL_METINLERI)); function sihirbazaGit() { onSec(); // Orkestratör (SihirbazBolumu) yalnızca /sonuc tabloyu render ederken // monte: profil çerezi (client'ta aynası localStorage profili) ya da eski // linklerdeki ?sira= geçerliyken. Profilsiz /sonuc'ta (SiraGerekli // görünümü) olay boşa gider — kapıya düş. if (pathname === "/sonuc" && (profil || searchParams.get("sira"))) { window.dispatchEvent(new Event(SIHIRBAZ_AC_EVENT)); return; } if (profil) { router.push(sonucHref({ sihirbaz: "1", kaynak: "arama" })); return; } // Yapay Zeka niyetli CTA: kapı tamamlanınca /sonuc'ta üretim akışı devam // etmeli ("sonuc" hedefi ücretsiz tabloda bırakıyor, liste hiç kurulmuyordu). profilToplamaAc("sihirbaz"); } return (
{KANITLAR.map(({ ikon: Ikon, etiket }) => ( {etiket} ))}
); }