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(); 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("Ýeňiji saýlanmady"); 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(y) ý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(y) ýeňiji saýlanýar`); setBottomText("..."); setWinnerSelectingStatus("is-selecting"); setPendingWinner(winnerData); setCurrentNumber(winnerData.ticket); setTimeout(() => { setTopText(`${winnerData.winner_no}-nji(y) ý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(y) ý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(y) ý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 && ( )}
); }; export default LotteryWinnersSection;