import { useEffect, useState } from "react"; import { COUNTDOWN_ENABLED, REGISTRATION_OPENS_AT } from "./opening"; interface RegistrationOpenState { isOpen: boolean; days: number; hours: number; minutes: number; seconds: number; } function compute(): RegistrationOpenState { if (!COUNTDOWN_ENABLED) { return { isOpen: true, days: 0, hours: 0, minutes: 0, seconds: 0 }; } const diff = REGISTRATION_OPENS_AT.getTime() - Date.now(); if (diff <= 0) { return { isOpen: true, days: 0, hours: 0, minutes: 0, seconds: 0 }; } const totalSeconds = Math.floor(diff / 1000); const days = Math.floor(totalSeconds / 86400); const hours = Math.floor((totalSeconds % 86400) / 3600); const minutes = Math.floor((totalSeconds % 3600) / 60); const seconds = totalSeconds % 60; return { isOpen: false, days, hours, minutes, seconds }; } /** * Returns live countdown state to {@link REGISTRATION_OPENS_AT}. * Ticks every second; clears the interval once registration is open. */ export function useRegistrationOpen(): RegistrationOpenState { const [state, setState] = useState(compute); useEffect(() => { if (state.isOpen) return; const id = setInterval(() => { const next = compute(); setState(next); if (next.isOpen) clearInterval(id); }, 1000); return () => clearInterval(id); }, [state.isOpen]); return state; }