Selected number matching Random Numbers

I am creating a lottery game and I am facing some problems. The player can choose 5 numbers and as soon as the player sends the 5 lottery numbers, the machine generates 5 random numbers. numbers 2, 3, 4, and 5 are the winning numbers. The problem is that when I select 5 numbers and there is the same number among the random generated numbers, there is no Match. The order does not matter, if there is a matching number, the player should win. Can you help what is missing? `

import { useEffect, useState } from "react";
import useLottoInfo from "./useLottoInfo";
import usePlayerInfo from "./usePlayerInfo";

const useGameLogic = () => {
  const { playerName, playerBalance, setPlayerName, setPlayerBalance } =
    usePlayerInfo();

  const {
    selectedNumbers,
    lottoNumbers,
    prize,
    ticketList,
    generatedNumbers,
    hasResult,
    setHasResult,
    setSelectedNumbers,
    setGeneratedNumbers,
    setLottoNumbers,
    setPrize,
    setTicketList,
  } = useLottoInfo();

  const [numbersGenerated, setNumbersGenerated] = useState(false);
  const [isGeneratingNumbers, setIsGeneratingNumbers] = useState(false);

  useEffect(() => {
    setLottoNumbers(generateRandomNumbers());
  }, []);

  const generateRandomNumbers = () => {
    const numbers = [];
    while (numbers.length < 5) {
      const randomNum = Math.floor(Math.random() * 39) + 1;
      if (!numbers.includes(randomNum)) {
        numbers.push(randomNum);
      }
    }
    return numbers;
  };

  const handleSelectNumber = (number) => {
    if (selectedNumbers.length < 5 && !selectedNumbers.includes(number)) {
      setSelectedNumbers([...selectedNumbers, number]);
    }
  };

  const handleGenerateNumbers = () => {
    if (isGeneratingNumbers || numbersGenerated) {
      alert("You have already generated numbers for this ticket.");
      return;
    }

    if (
      playerBalance >= 500 &&
      selectedNumbers.length === 5 &&
      !hasResult &&
      !numbersGenerated
    ) {
      const matchingNumbers = selectedNumbers.filter((num) =>
        lottoNumbers.some(
          (lottoNum) =>
            lottoNum === num &&
            lottoNumbers.filter((n) => n === num).length === 1
        )
      );

      let currentPrize = 0;

      switch (matchingNumbers.length) {
        case 1:
          currentPrize = 200;
          break;
        case 2:
          currentPrize = 400;
          break;
        case 3:
          currentPrize = 600;
          break;
        case 4:
          currentPrize = 1000;
          break;
        case 5:
          currentPrize = 10000;
          break;
        default:
          currentPrize = 0;
      }

      const newTicket = {
        numbers: selectedNumbers,
        matchingNumbers: matchingNumbers.length,
        prize: currentPrize,
      };

      setTicketList([...ticketList, newTicket]);

      setPlayerBalance(playerBalance + currentPrize - 500);
      setGeneratedNumbers(generateRandomNumbers());
      setHasResult(true);
      setSelectedNumbers([]);
      setIsGeneratingNumbers(true);
      setNumbersGenerated(true);
    } else {
      alert("Please select exactly 5 numbers to generate your lottery ticket.");
    }
  };

  const handleNewTicket = () => {
    setNumbersGenerated(false);
    setHasResult(false);
    setIsGeneratingNumbers(false);
  };

  return {
    playerName,
    playerBalance,
    selectedNumbers,
    lottoNumbers,
    prize,
    ticketList,
    generatedNumbers,
    hasResult,
    setHasResult,
    setPlayerName,
    setPlayerBalance,
    setSelectedNumbers,
    setGeneratedNumbers,
    setLottoNumbers,
    setPrize,
    setTicketList,
    handleSelectNumber,
    handleGenerateNumbers,
    handleNewTicket,
  };
};

export default useGameLogic;