import { useState, useEffect } from 'react'; interface CountdownData { days: number; hours: number; minutes: number; seconds: number; isExpired: boolean; } export const useCountdown = (targetDate: Date | null): CountdownData => { const [countdown, setCountdown] = useState({ days: 0, hours: 0, minutes: 0, seconds: 0, isExpired: false, }); useEffect(() => { if (!targetDate) { setCountdown({ days: 0, hours: 0, minutes: 0, seconds: 0, isExpired: true, }); return; } const updateCountdown = () => { const now = new Date().getTime(); const target = targetDate.getTime(); const difference = target - now; if (difference <= 0) { setCountdown({ days: 0, hours: 0, minutes: 0, seconds: 0, isExpired: true, }); return; } const days = Math.floor(difference / (1000 * 60 * 60 * 24)); const hours = Math.floor((difference % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); const minutes = Math.floor((difference % (1000 * 60 * 60)) / (1000 * 60)); const seconds = Math.floor((difference % (1000 * 60)) / 1000); setCountdown({ days, hours, minutes, seconds, isExpired: false, }); }; // Update immediately updateCountdown(); // Set up interval to update every second const interval = setInterval(updateCountdown, 1000); return () => clearInterval(interval); }, [targetDate]); return countdown; };