"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"; import { convertToMovie } from "@/helpers/convertToMovie"; import { formatter } from "@/helpers/formater"; 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 loading = movies.length === 0; const convertedMovie = convertToMovie(movieDetails); // Convert TMDB movie to our Movie type. const handleAddToList = () => { if (isInStore) { deleteMovie(movieDetails.id); } else { if (convertedMovie) { addMovie(convertedMovie); } } }; const handleToggleFavorite = () => { if (!isInStore) { if (convertedMovie) { addMovie({ ...convertedMovie, favorite: true, seen: true }); } } else { updateMovie(movieDetails.id, { favorite: !isFavorite, seen: isSeen || !isFavorite, }); } }; const handleToggleSeen = () => { if (!isInStore) { if (convertedMovie) { addMovie({ ...convertedMovie, seen: true }); } } else { updateMovie(movieDetails.id, { seen: !isSeen, favorite: false, }); } }; 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 && (
{formatter.formatDate(movieDetails.release_date)}
)} {movieDetails.runtime && (
{formatter.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 */} {!loading && (
)}
); };