const axios = require('axios'); require('dotenv').config(); const API_KEY = process.env.TMDB_API_KEY; const BASE = 'https://api.themoviedb.org/3'; let genreMap = null; async function loadGenres() { if (genreMap) return genreMap; const [movieRes, tvRes] = await Promise.all([ axios.get(`${BASE}/genre/movie/list`, { params: { api_key: API_KEY } }), axios.get(`${BASE}/genre/tv/list`, { params: { api_key: API_KEY } }) ]); genreMap = {}; (movieRes.data.genres || []).forEach(g => genreMap[g.id] = g.name); (tvRes.data.genres || []).forEach(g => genreMap[g.id] = g.name); return genreMap; } async function search(query, mediaType) { if (!API_KEY) throw new Error('TMDB_API_KEY not set in environment'); await loadGenres(); const params = { api_key: API_KEY, query, include_adult: false, page: 1 }; let url = `${BASE}/search/multi`; if (mediaType === 'movie' || mediaType === 'tv') url = `${BASE}/search/${mediaType}`; const res = await axios.get(url, { params }); const results = (res.data.results || []).slice(0, 12); return results.map(r => { const title = r.title || r.name || r.original_title || r.original_name || ''; const overview = r.overview || ''; const genreIds = r.genre_ids || (r.genres ? r.genres.map(g => g.id) : []); const genres = genreIds.map(id => genreMap[id]).filter(Boolean); return { id: r.id, title, type: r.media_type || (r.title ? 'movie' : 'tv'), overview, genres, poster: r.poster_path ? `https://image.tmdb.org/t/p/w342${r.poster_path}` : null }; }); } module.exports = { search };