File size: 3,008 Bytes
4bea261
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
---
import HeroBanner from './HeroBanner.jsx';
import { getNewestMovies } from '../lib/api.js';
import { txasupabase } from '../lib/txasupabase.js';

// 1. Lấy tất cả phim cục bộ để tìm phim được ghim lên slider
const localMoviesObj = await txasupabase.getLocalMovies();
const deletedSlugs = await txasupabase.getDeletedMovies();

const allLocalMovies = Object.values(localMoviesObj)
  .filter(m => !deletedSlugs.includes(m.movie.slug));

// Lọc các phim được chọn ghim lên slider
const pinnedMovies = allLocalMovies
  .filter(m => m.movie.is_slider === true || m.movie.is_slider === 'true')
  .map(m => ({
    _id: m.movie.id || m.movie.slug,
    name: m.movie.name,
    slug: m.movie.slug,
    origin_name: m.movie.origin_name,
    thumb_url: m.movie.thumb_url,
    poster_url: m.movie.poster_url,
    year: m.movie.year,
    quality: m.movie.quality || 'FHD',
    lang: m.movie.lang || 'Vietsub',
    episode_current: m.movie.episode_current || 'Tập 1',
    type: m.movie.type || 'single',
    isLocal: true
  }));

// Sắp xếp phim được ghim theo thời gian cập nhật mới nhất
pinnedMovies.sort((a, b) => {
  const timeA = new Date(localMoviesObj[a.slug]?.movie.modified?.time || 0).getTime();
  const timeB = new Date(localMoviesObj[b.slug]?.movie.modified?.time || 0).getTime();
  return timeB - timeA;
});

// Cần tối đa 10 phim cho slider
let heroMovies = [...pinnedMovies];

if (heroMovies.length === 0) {
  // Lấy danh sách phim mới nhất để bù đắp các vị trí trống
  const newest = await getNewestMovies(1);
  const newestMovies = newest?.items || [];
  
  let extraMovies = [...newestMovies];
  if (extraMovies.length < 4) {
    try {
      const res = await fetch('https://phimapi.com/danh-sach/phim-moi-cap-nhat?page=1');
      if (res.ok) {
        const data = await res.json();
        const items = 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 || 'single',
          isLocal: false
        }));
        extraMovies = [...extraMovies, ...mapped.filter(m => !extraMovies.some(x => x.slug === m.slug))];
      }
    } catch (e) {
      console.error('Hero fallback error:', e);
    }
  }

  // Thêm phim mới vào slider và loại trừ các phim đã được ghim/đã thêm để tránh trùng lặp
  for (const movie of extraMovies) {
    if (heroMovies.length >= 10) break;
    if (!heroMovies.some(m => m.slug === movie.slug)) {
      heroMovies.push(movie);
    }
  }
}

// Giới hạn đúng tối đa 10 phim
heroMovies = heroMovies.slice(0, 10);
---

<HeroBanner movies={heroMovies} client:load />