import { useState, useEffect } from 'react'; import { useLotteryAuth } from '@/store/useLotteryAuth'; import { LotteryWinnerDataSimplified } from '@/typings/lottery/lottery.types'; import LotteryWinnersList from './winners/LotteryWinnersList'; import LotterySlotCounter from './slotCounter/LotterySlotCounter'; import ReactConfetti from 'react-confetti'; import { useWindowSize } from 'react-use'; import AnimatedText from '@/components/common/AnimatedText'; import { useWebsocketLottery } from '@/hooks/useWebSocketLottery'; import Confetti from '../common/Confetti'; import { AnimatePresence, motion } from 'framer-motion'; const WEBSOCKET_URL = 'wss://sms.turkmentv.gov.tm/ws/lottery?dst=0506'; const SLOT_COUNTER_DURATION = 30000; const LotteryWinnersSection = ({ lotteryStatus }: { lotteryStatus: string }) => { const [winners, setWinners] = useState([]); const [currentNumber, setCurrentNumber] = useState('00-00-00-00-00'); const [startNumber, setStartNumber] = useState('00-00-00-00-00'); const [isConfettiActive, setIsConfettiActive] = useState(false); const { lotteryData } = useLotteryAuth(); const [winnerSelectingStatus, setWinnerSelectingStatus] = useState< 'not-selected' | 'is-selecting' | 'selected' >('not-selected'); const [pendingWinner, setPendingWinner] = useState(null); const [topText, setTopText] = useState('Bije az wagtdan başlaýar'); const [bottomText, setBottomText] = useState(''); // WebSocket Hook const { wsStatus, subscribeToMessages } = useWebsocketLottery(WEBSOCKET_URL); useEffect(() => { if (lotteryData) { if (lotteryData?.data.winners.length > 0) { const simplifiedWinners = lotteryData.data.winners.map((winner) => ({ client: winner.client, winner_no: winner.winner_no, ticket: winner.ticket, })); setWinners(simplifiedWinners); // setCurrentNumber(lotteryData.data.winners.at(-1)?.ticket || '00-00-00-00-00'); setWinnerSelectingStatus('selected'); setTopText(`${lotteryData.data.winners.at(-1)?.winner_no}-nji ýeňiji`); setBottomText(lotteryData.data.winners.at(-1)?.client || ''); setIsConfettiActive(true); } } }, [lotteryData]); useEffect(() => { const unsubscribe = subscribeToMessages((event) => { const newWinner = JSON.parse(event.data); if (!newWinner || !newWinner.phone || !newWinner.winner_no || !newWinner.ticket) { console.error('❌ Invalid data format received'); return; } const winnerData = { client: newWinner.phone, winner_no: newWinner.winner_no, ticket: newWinner.ticket, }; setIsConfettiActive(false); setTopText(`${winnerData.winner_no}-nji ýeňiji saýlanýar`); setBottomText('...'); setWinnerSelectingStatus('is-selecting'); setPendingWinner(winnerData); setCurrentNumber(winnerData.ticket); setTimeout(() => { setTopText(`${winnerData.winner_no}-nji ýeňiji`); setBottomText(winnerData.client); setWinnerSelectingStatus('selected'); setIsConfettiActive(true); setWinners((prev) => [...prev, winnerData]); }, SLOT_COUNTER_DURATION); }); return () => { unsubscribe(); }; }, [subscribeToMessages]); // useEffect(() => { // setTimeout(() => { // setIsConfettiActive(false); // setTopText(`${1}-nji ýeňiji saýlanýar`); // setBottomText('...'); // setWinnerSelectingStatus('is-selecting'); // // setPendingWinner(winnerData); // setCurrentNumber('55-44-33-22-11'); // setTimeout(() => { // setTopText('Ýeniji'); // setBottomText('99361245555'); // setWinnerSelectingStatus('selected'); // setIsConfettiActive(true); // // setWinners((prev) => [...prev, winnerData]); // }, SLOT_COUNTER_DURATION); // }, 10000); // setTimeout(() => { // setIsConfettiActive(false); // setTopText(`${1}-nji ýeňiji saýlanýar`); // setBottomText('...'); // setWinnerSelectingStatus('is-selecting'); // // setPendingWinner(winnerData); // setCurrentNumber('11-22-33-44-55'); // setTimeout(() => { // setTopText('Ýeniji'); // setBottomText('99361245555'); // setWinnerSelectingStatus('selected'); // setIsConfettiActive(true); // // setWinners((prev) => [...prev, winnerData]); // }, SLOT_COUNTER_DURATION); // }, SLOT_COUNTER_DURATION + 20000); // }, []); return (
{wsStatus === 'error' && (
Websocket connection error.
)} {' '}
{winnerSelectingStatus === 'not-selected' ? ( // ) : ( {/* */} {bottomText && ( // )} )}
{currentNumber && }
{winners.length > 0 && }
); }; export default LotteryWinnersSection;