--- import TopTenSection from './TopTenSection.jsx'; import { getSeriesMovies } from '../lib/api.js'; import { txasupabase } from '../lib/txasupabase.js'; const data = await getSeriesMovies(1); let rawMovies = data?.items || []; if (rawMovies.length < 4) { try { const res = await fetch('https://phimapi.com/v1/api/danh-sach/phim-bo?page=1'); if (res.ok) { const d = await res.json(); const items = d.data?.items || []; const mapped = items.map(item => ({ _id: item._id, name: item.name, slug: item.slug, origin_name: item.origin_name, thumb_url: item.thumb_url, poster_url: item.poster_url, year: item.year, quality: item.quality || 'FHD', lang: item.lang || 'Vietsub', episode_current: item.episode_current || 'Tập 1', type: item.type || 'series', isLocal: false })); rawMovies = [...rawMovies, ...mapped.filter(m => !rawMovies.some(x => x.slug === m.slug))]; } } catch (e) { console.error('TopTen fallback error:', e); } } // Smart Deduplicate by base name (to avoid multiple seasons of the same show) const uniqueMovies = []; const seenBaseNames = new Set(); for (const m of rawMovies) { const baseName = m.name.split(' (Phần')[0].trim().toLowerCase(); if (!seenBaseNames.has(baseName)) { seenBaseNames.add(baseName); uniqueMovies.push(m); } } const seriesMovies = uniqueMovies.slice(0, 10); // Fetch Top Rated & Most Favorited const topRated = await txasupabase.getTopRatedMovies(10).catch(() => []); const mostFavorited = await txasupabase.getMostFavoritedMovies(10).catch(() => []); // Intelligent Fallbacks const finalSeries = seriesMovies; const finalRated = topRated.length >= 3 ? topRated : seriesMovies; const finalFavorited = mostFavorited.length >= 3 ? mostFavorited : seriesMovies; ---