/** * PopularFeatures - Main component for popular movies section * Displays Douban movie recommendations with tag filtering and infinite scroll. * Includes personalized "为你推荐" tag when user has 2+ watched items. */ 'use client'; import { useState } from 'react'; import { TagManager } from './TagManager'; import { MovieGrid } from './MovieGrid'; import { useTagManager } from './hooks/useTagManager'; import { usePopularMovies } from './hooks/usePopularMovies'; import { usePersonalizedRecommendations } from './hooks/usePersonalizedRecommendations'; interface DoubanMovie { id: string; title: string; cover: string; rate: string; url: string; } interface PopularFeaturesProps { onSearch?: (query: string) => void; } export function PopularFeatures({ onSearch }: PopularFeaturesProps) { const { tags, selectedTag, contentType, newTagInput, showTagManager, justAddedTag, setContentType, setSelectedTag, setNewTagInput, setShowTagManager, setJustAddedTag, handleAddTag, handleDeleteTag, handleRestoreDefaults, handleDragEnd, isLoadingTags, } = useTagManager(); const { movies: recommendMovies, loading: recommendLoading, hasMore: recommendHasMore, hasHistory, prefetchRef: recommendPrefetchRef, loadMoreRef: recommendLoadMoreRef, } = usePersonalizedRecommendations(false); const [isRecommendSelected, setIsRecommendSelected] = useState(false); const effectiveRecommendSelected = hasHistory && isRecommendSelected; const isTagManagementMode = showTagManager; const { movies, loading, hasMore, prefetchRef, loadMoreRef, } = usePopularMovies( effectiveRecommendSelected ? '' : selectedTag, tags, contentType ); const handleMovieClick = (movie: DoubanMovie) => { if (onSearch) { onSearch(movie.title); } }; const handleRecommendSelect = () => { setIsRecommendSelected(true); }; const handleRegularTagSelect = (tagId: string) => { if (tagId === 'custom_高级' || tags.find(t => t.id === tagId)?.label === '高级') { window.location.href = '/premium'; return; } setIsRecommendSelected(false); setSelectedTag(tagId); }; return (