import { Clapperboard, Clock3, Flame, Star } from 'lucide-solid' import { For, Show, createMemo, createResource } from 'solid-js' import { MediaCard } from '@/components/media/media-card' import { Badge } from '@/components/ui/badge' import { Button } from '@/components/ui/button' import { Card, CardContent } from '@/components/ui/card' import { DataRow } from '@/components/ui/data-row' import { EmptyState } from '@/components/ui/empty-state' import { SectionHeading } from '@/components/ui/section-heading' import { Skeleton } from '@/components/ui/skeleton' import { discoverService } from '@/services/discover-service' import type { MediaItem } from '@/types/domain' import { formatDate } from '@/utils/format' import { mediaBadgeVariant, mediaTypeLabel } from '@/utils/media' const moviesOnly = (items: MediaItem[]) => items.filter((item) => item.type === 'movie') export const MoviesPage = () => { const [discoverData, { refetch }] = createResource(() => discoverService.getSections({ page: 1, pageSize: 5 })) const allSections = createMemo(() => discoverData() ?? []) const trendingMovies = createMemo(() => moviesOnly(allSections().find((section) => section.kind === 'trending')?.items ?? []), ) const topRatedMovies = createMemo(() => moviesOnly(allSections().find((section) => section.kind === 'top-rated')?.items ?? []), ) const upcomingMovies = createMemo(() => moviesOnly(allSections().find((section) => section.kind === 'upcoming')?.items ?? []), ) const averageRating = createMemo(() => { const items = topRatedMovies() if (items.length === 0) return 0 return (items.reduce((acc, item) => acc + item.rating, 0) / items.length).toFixed(1) }) return (
{trendingMovies().length + topRatedMovies().length} loaded cards} action={} />

Trending

{trendingMovies().length}

Top rated

{topRatedMovies().length}

Upcoming

{upcomingMovies().length}

Avg rating

{averageRating()}

index)}>{() => }
{trendingMovies().length} active} /> 0} fallback={} >
{(item) => }
Live} />
} /> } /> } />
{upcomingMovies().length} upcoming} /> 0} fallback={} >
{(item) => ( {mediaTypeLabel(item.type)}} trailing={} /> )}
{discoverData.error instanceof Error ? discoverData.error.message : 'Failed to load movies'}
) }