"use client"; import Image from "next/image"; import { useRouter } from "next/navigation"; import { useCallback, useEffect, useState } from "react"; import Button from "@/components/Componentes/button"; import NetworkImage from "@/components/Componentes/network-image"; import PageHeader from "@/components/Componentes/page-header"; import SectionOverlayHost from "@/components/Componentes/section-overlay-host"; import SliderPage from "@/components/Componentes/slider-page"; import VideoPlayer from "@/components/Componentes/video-player"; import { IntroMatchesIcon, IntroMarriagesIcon, IntroPlayButtonIcon, IntroUsersIcon, } from "@/components/Componentes/intro-hero-illustration"; import { useMarriageConfigQuery } from "@/hooks/marriage/use-marriage-config"; import { useMarriageProfileQuery } from "@/hooks/marriage/use-profile-main"; import { useHabibWebReady } from "@/hooks/use-habib-web-ready"; import { useHardwareBackHandler } from "@/hooks/use-hardware-back-handler"; import { authBridge } from "@/lib/auth-bridge"; import { SHOW_INTRO_VIDEOS } from "@/config/features"; import { getSubmitPath } from "@/lib/get-submit-path"; import { localizePath } from "@/translations/config"; import { useI18n } from "@/translations/provider"; import { PageBackground } from "@/components/Componentes/page-background"; export default function IntroClient() { const router = useRouter(); const { dictionary: t, locale } = useI18n(); const { data: profile, refetch } = useMarriageProfileQuery({ enabled: false, retry: false, }); const [isSubmitting, setIsSubmitting] = useState(false); const [isPlayerOpen, setIsPlayerOpen] = useState(false); const [isStepsOpen, setIsStepsOpen] = useState(false); const { data: config } = useMarriageConfigQuery(); // Signal Flutter that the Intro UI is ready. Config has a local fallback // image so we don't need to wait for it — announce immediately on mount. useHabibWebReady(true); useEffect(() => { const readStepsFromUrl = () => { if (typeof window === "undefined") return; const params = new URLSearchParams(window.location.search); setIsStepsOpen(params.get("steps") === "open"); }; readStepsFromUrl(); window.addEventListener("popstate", readStepsFromUrl); return () => window.removeEventListener("popstate", readStepsFromUrl); }, []); const handleOpenSteps = useCallback(() => { setIsStepsOpen(true); if (typeof window !== "undefined") { const url = new URL(window.location.href); url.searchParams.set("steps", "open"); window.history.replaceState({ steps: "open" }, "", url.toString()); } }, []); const handleCloseSteps = useCallback(() => { setIsStepsOpen(false); if (typeof window !== "undefined") { const params = new URLSearchParams(window.location.search); if (params.get("steps") === "open") { const url = new URL(window.location.href); url.searchParams.delete("steps"); window.history.replaceState({}, "", url.toString()); } } }, []); useHardwareBackHandler(() => { if (isStepsOpen) { handleCloseSteps(); return true; // handled: keep WebView open, just close the overlay } return false; // Root: tell Flutter to close WebView screen }, isStepsOpen); const handleSubmit = async () => { if (isSubmitting) { return; } setIsSubmitting(true); try { if (!authBridge.isAuthenticated()) { const token = await authBridge.ensureToken(); if (!token) { console.warn("No token from bridge – login was not completed"); return; } } let profileResponse = profile; try { const { data: freshProfile } = await refetch(); profileResponse = freshProfile ?? profile; } catch (refetchError) { console.warn( "Could not refetch profile data – using fallback", refetchError, ); } const submitPath = getSubmitPath(profileResponse); if (submitPath === "/intro" || submitPath === "/terms") { handleOpenSteps(); } else { router.push(localizePath(submitPath, locale)); } } catch (error) { console.error("Submission/redirect failed", error); handleOpenSteps(); } finally { setIsSubmitting(false); } }; return ( <>
{t["heavenly

{t["A Path to Heavenly Marriage"]}

{ t[ 'We have come together with the goal of creating a secure and confidential path for "permanent marriage" among Muslims' ] }

120

{t["user profiles"]}

14

{t["matches"]}

14

{t["marriages"]}

{SHOW_INTRO_VIDEOS && ( <>
setIsPlayerOpen(true)} >
setIsPlayerOpen(false)} videoUrl={config?.intro_video_url} /> )}
{isStepsOpen && ( )} ); }