import React, { useState, useEffect } from "react"; import Navbar from "../components/Layout/Navbar"; import Button, { ToggleButton } from "../components/Layout/Button"; import ChatPanel from "../components/Video/ChatPanel"; import { useNavigate, useParams } from "react-router-dom"; import { useAuthModal } from "../hooks/useAuthModal"; import { useAuth } from "../context/AuthContext"; import { useFollow } from "../hooks/useFollow"; import VideoPlayer from "../components/Video/VideoPlayer"; import { SocketProvider } from "../context/SocketContext"; import AuthModal from "../components/Auth/AuthModal"; interface VideoPageProps { streamerId: number; } interface StreamDataProps { streamTitle: string; streamerName: string; startTime: string; categoryName: string; } const VideoPage: React.FC = ({ streamerId }) => { const { isLoggedIn } = useAuth(); const { streamerName } = useParams<{ streamerName: string }>(); const [streamData, setStreamData] = useState(); const [viewerCount, setViewerCount] = useState(0); const [isChatOpen, setIsChatOpen] = useState(true); const { isFollowing, checkFollowStatus, followUser, unfollowUser } = useFollow(); const { showAuthModal, setShowAuthModal } = useAuthModal(); // const [showCheckout, setShowCheckout] = useState(false); // const showReturn = window.location.search.includes("session_id"); const navigate = useNavigate(); // useEffect(() => { // // Prevent scrolling when checkout is open // if (showCheckout) { // document.body.style.overflow = "hidden"; // } else { // document.body.style.overflow = "unset"; // } // // Cleanup function to ensure overflow is restored when component unmounts // return () => { // document.body.style.overflow = "unset"; // }; // }, [showCheckout]); useEffect(() => { // Fetch stream data for this streamer fetch(`/api/streams/${streamerId}/data`).then((res) => { if (!res.ok) { console.error("Failed to load stream data:", res.statusText); } res .json() .then((data) => { // Transform snake_case to camelCase const transformedData: StreamDataProps = { streamerName: data.username, streamTitle: data.title, startTime: data.start_time, categoryName: data.category_name, }; setStreamData(transformedData); // Check if the logged-in user is following this streamer if (isLoggedIn) checkFollowStatus(data.username); }) .catch((error) => { console.error("Error fetching stream data:", error); }); }); }, [streamerId]); // Keyboard shortcut to toggle chat useEffect(() => { const handleKeyPress = (e: KeyboardEvent) => { if (e.key === "c") { setIsChatOpen((prev) => !prev); } }; document.addEventListener("keydown", handleKeyPress); return () => { document.removeEventListener("keydown", handleKeyPress); }; }, []); const toggleChat = () => { setIsChatOpen((prev) => !prev); }; return (
{isChatOpen ? "Hide Chat" : "Show Chat"} Press C setViewerCount(count)} />

{streamData ? streamData.streamTitle : "Loading..."}

{/* (Un)Follow Button */} {!isFollowing ? ( ) : ( )}
Viewers {viewerCount}
Started {streamData ? new Date(streamData.startTime).toLocaleString() : "Loading..."}
Category {streamData ? streamData.categoryName : "Loading..."}
{isLoggedIn && ( )}
{/* {showCheckout && setShowCheckout(false)} />} */} {/* {showReturn && } */} {showAuthModal && setShowAuthModal(false)} />}
); }; export default VideoPage;