"use client"; import { useEffect, useRef, useState } from "react"; import { useTranslation } from "@turbostarter/i18n"; import { cn } from "@turbostarter/ui"; import { buttonVariants } from "@turbostarter/ui-web/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle, } from "@turbostarter/ui-web/dialog"; import { Icons } from "@turbostarter/ui-web/icons"; const MIN_DELAY_MS = 15_000; const STORAGE_LAST_SHOWN_AT = "buyCtaDialog:lastShownAt"; const STORAGE_PREV_DELAY_MS = "buyCtaDialog:prevDelayMs"; export const BuyCtaDialog = () => { const { t } = useTranslation(["common", "marketing"]); const [open, setOpen] = useState(false); const timeoutIdRef = useRef(null); useEffect(() => { const scheduleNext = () => { const now = Date.now(); const storedLastShown = Number( window.localStorage.getItem(STORAGE_LAST_SHOWN_AT) ?? "0", ); const prevDelayMs = Number( window.localStorage.getItem(STORAGE_PREV_DELAY_MS) ?? "0", ); const nextDelay = Math.max( MIN_DELAY_MS, prevDelayMs ? prevDelayMs * 2 : MIN_DELAY_MS, ); const baseNextShow = storedLastShown ? storedLastShown + nextDelay : now + nextDelay; const delayFromNow = Math.max(MIN_DELAY_MS, baseNextShow - now); if (timeoutIdRef.current) { window.clearTimeout(timeoutIdRef.current); } timeoutIdRef.current = window.setTimeout(() => { setOpen(true); const shownAt = Date.now(); window.localStorage.setItem(STORAGE_LAST_SHOWN_AT, String(shownAt)); window.localStorage.setItem(STORAGE_PREV_DELAY_MS, String(nextDelay)); scheduleNext(); }, delayFromNow); }; scheduleNext(); return () => { if (timeoutIdRef.current) { window.clearTimeout(timeoutIdRef.current); } }; }, []); return ( {t("cta.buy.question")} {t("cta.buy.description")} {t("cta.buy.button")}
{t("or")}

{t("cta.buy.join.description")}

{t("cta.buy.join.button")}
); };