'use client' import { useState, useEffect } from 'react' import { useSession } from 'next-auth/react' import { useRouter } from 'next/navigation' import { ReviewCard } from '@/components/ReviewCard' import Link from 'next/link' interface GameDetails { app_id: number name: string description: string | null header_image: string | null background_image: string | null release_date: string | null developers: string[] publishers: string[] genres: string[] } interface Review { id: string username: string avatar_url: string | null content: string rating: number playtime_hours: number | null upvotes: number downvotes: number user_vote: number | null created_at: string } export default function GamePage({ params }: { params: Promise<{ appId: string }> }) { const { data: session } = useSession() const router = useRouter() const [game, setGame] = useState(null) const [reviews, setReviews] = useState([]) const [loading, setLoading] = useState(true) const [resolvedParams, setResolvedParams] = useState<{ appId: string } | null>(null) useEffect(() => { params.then(setResolvedParams) }, [params]) useEffect(() => { if (!resolvedParams) return const fetchData = async () => { setLoading(true) try { const [gameRes, reviewsRes] = await Promise.all([ fetch(`/api/games/${resolvedParams.appId}`), fetch(`/api/reviews?appId=${resolvedParams.appId}`) ]) const gameData = await gameRes.json() const reviewsData = await reviewsRes.json() setGame(gameData) setReviews(reviewsData) } catch (error) { console.error('Failed to fetch data:', error) } finally { setLoading(false) } } fetchData() }, [resolvedParams]) const handleVote = async (reviewId: string, voteType: 1 | -1) => { await fetch(`/api/reviews/${reviewId}/vote`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ voteType }) }) const res = await fetch(`/api/reviews?appId=${resolvedParams?.appId}`) const data = await res.json() setReviews(data) } const canReview = session?.user?.steamId if (loading) { return (
Loading...
) } if (!game) { return (
Game not found
) } return (
{game.name}

{game.name}

{game.genres.map((genre) => ( {genre} ))}
{game.developers.length > 0 && (

Developer: {game.developers.join(', ')}

)} {game.publishers.length > 0 && (

Publisher: {game.publishers.join(', ')}

)} {game.release_date && (

Release Date: {game.release_date}

)} {canReview ? ( Write a Review ) : session ? ( Link Steam to Write Review ) : ( Sign In to Write Review )}
{game.description && (

About

{game.description}

)}

Reviews ({reviews.length})

{reviews.length === 0 ? (

No reviews yet. Be the first to write one!

) : (
{reviews.map((review) => ( ))}
)}
) }