"use client"; import { BackButton } from "@/components/atoms/BackButton"; import { Button } from "@/components/atoms/Button"; import { GenreLabel } from "@/components/atoms/GenreLabel"; import { MovieDetailsRich } from "@/lib/tmdb/types"; import { useGlobalStore } from "@/app/store/globalStore"; import { FC } from "react"; import { FaHeart, FaBookmark, FaClock, FaCalendar, FaGlobe, FaEye, } from "react-icons/fa"; type Props = { movieDetails: MovieDetailsRich; }; export const HeroMovie: FC = ({ movieDetails }) => { const { movies, addMovie, deleteMovie, updateMovie } = useGlobalStore(); // Check if movie is in store and get its state. const movieInStore = movies.find((m) => m.id === movieDetails.id); const isInStore = !!movieInStore; const isFavorite = movieInStore?.favorite || false; const isSeen = movieInStore?.seen || false; const formatRuntime = (minutes: number) => { const hours = Math.floor(minutes / 60); const mins = minutes % 60; return `${hours}h ${mins}m`; }; // Convert TMDB movie to our Movie type. const convertToMovie = () => ({ id: movieDetails.id, title: movieDetails.title, adult: movieDetails.adult, backdrop_path: movieDetails.backdrop_path || "", genre_ids: movieDetails.genres.map((g) => g.id).join(","), original_language: movieDetails.original_language, original_title: movieDetails.original_title, overview: movieDetails.overview || "", popularity: movieDetails.popularity, poster_path: movieDetails.poster_path || "", release_date: movieDetails.release_date, video: movieDetails.video, vote_average: movieDetails.vote_average, vote_count: movieDetails.vote_count, favorite: false, seen: false, }); const handleAddToList = () => { if (isInStore) { deleteMovie(movieDetails.id); } else { addMovie(convertToMovie()); } }; const handleToggleFavorite = () => { if (!isInStore) { addMovie({ ...convertToMovie(), favorite: true }); } else { updateMovie(movieDetails.id, { favorite: !isFavorite }); } }; const handleToggleSeen = () => { if (!isInStore) { addMovie({ ...convertToMovie(), seen: true }); } else { updateMovie(movieDetails.id, { seen: !isSeen }); } }; return (
{/* Navigation */}
{/* Main content */}
{/* Movie poster */}
{movieDetails.title}
{/* Movie details */}
{/* Title and rating */}

{movieDetails.title}

{movieDetails.tagline && (

"{movieDetails.tagline}"

)}
{[...Array(5)].map((_, i) => ( ))}
{movieDetails.vote_average.toFixed(1)} ({movieDetails.vote_count} głosów)
{/* Key info */}
{movieDetails.release_date && (
{new Date(movieDetails.release_date).getFullYear()}
)} {movieDetails.runtime && (
{formatRuntime(movieDetails.runtime)}
)} {movieDetails.spoken_languages[0] && (
{movieDetails.spoken_languages[0].name}
)}
Status: {movieDetails.status}
{/* Genres */} {movieDetails.genres.length > 0 && (

Gatunki

{movieDetails.genres.map((genre) => ( ))}
)} {/* Synopsis */} {movieDetails.overview && (

Opis

{movieDetails.overview}

)} {/* Action buttons */}
); };