import { useEffect, useState } from "react"; import { useNavigate } from "react-router-dom"; import { get } from "@/backend/metadata/tmdb"; import { Movie } from "@/pages/discover/common"; import { conf } from "@/setup/config"; import { useLanguageStore } from "@/stores/language"; import { getTmdbLanguageCode } from "@/utils/language"; interface TMDBMovieResponse { results: Movie[]; } export function RandomMovieButton() { const [randomMovie, setRandomMovie] = useState(null); const [countdown, setCountdown] = useState(null); const [countdownTimeout, setCountdownTimeout] = useState(null); const [movies, setMovies] = useState([]); const navigate = useNavigate(); const userLanguage = useLanguageStore((s) => s.language); const formattedLanguage = getTmdbLanguageCode(userLanguage); // Fetch popular movies for random selection useEffect(() => { const fetchMovies = async () => { try { const data = await get("/movie/popular", { api_key: conf().TMDB_READ_API_KEY, language: formattedLanguage, page: 2, }); setMovies(data.results); } catch (error) { console.error("Error fetching popular movies:", error); } }; fetchMovies(); }, [formattedLanguage]); useEffect(() => { let countdownInterval: NodeJS.Timeout; if (countdown !== null && countdown > 0) { countdownInterval = setInterval(() => { setCountdown((prev) => (prev !== null ? prev - 1 : prev)); }, 1000); } return () => clearInterval(countdownInterval); }, [countdown]); const handleRandomMovieClick = () => { if (movies.length === 0) return; const uniqueTitles = new Set(movies.map((movie) => movie.title)); const uniqueTitlesArray = Array.from(uniqueTitles); const randomIndex = Math.floor(Math.random() * uniqueTitlesArray.length); const selectedMovie = movies.find( (movie) => movie.title === uniqueTitlesArray[randomIndex], ); if (selectedMovie) { if (countdown !== null && countdown > 0) { setCountdown(null); if (countdownTimeout) { clearTimeout(countdownTimeout); setCountdownTimeout(null); setRandomMovie(null); } } else { setRandomMovie(selectedMovie); setCountdown(5); const timeoutId = setTimeout(() => { navigate(`/media/tmdb-movie-${selectedMovie.id}-random`); }, 5000); setCountdownTimeout(timeoutId); } } }; return (
); }