const { fetchTmdbData } = require('../handlers/mainHandle'); const { processVideo } = require ('../utils/ts'); // Definimos una función de mapeo para las rutas de TMDB // Esto ayuda a manejar los casos donde el path de nuestra API // no es exactamente igual al endpoint de TMDB, o si necesitas // ajustes especiales para ciertos endpoints. const tmdbEndpointMap = { '/movie/popular': 'movie/popular', '/tv/popular': 'tv/popular', '/trending/movie/day': 'trending/movie/day', '/trending/tv/day': 'trending/tv/day', '/trending/all/day': 'trending/all/day', '/trending/movie/week': 'trending/movie/week', '/trending/tv/week': 'trending/tv/week', 'tv&movie': 'trending/all/week', // Este es un ejemplo de cómo podrías mapear una ruta "genérica" a un endpoint específico. tv&movie es nombre interno. '/genre/movie/list': 'genre/movie/list', '/discover/movie': 'discover/movie', '/movie/upcoming': 'movie/upcoming', '/movie/now_playing': 'movie/now_playing', '/tv' : 'tv', '/movie' : 'movie', // Agrega más mapeos según necesites }; // Un controlador genérico para todas las rutas de TMDB async function getTmdbContent(req, res) { try { // req.path es la ruta de la URL de Express (ej. '/movie/popular') // Usamos el mapeo para obtener el endpoint real de TMDB const basePath = req.route.path.replace(/\/:tmdbid.*$/, ''); // Remueve todo después de '/:tmdbid' let tmdbEndpoint; if (req.params.seasonid) { tmdbEndpoint = `${tmdbEndpointMap[basePath]}/${req.params.tmdbid}/season/${req.params.seasonid}`; } else { tmdbEndpoint = req.params.tmdbid ? `${tmdbEndpointMap[basePath]}/${req.params.tmdbid}` : tmdbEndpointMap[basePath]; } if (!tmdbEndpoint) { return res.status(404).json({ error: "Endpoint de TMDB no encontrado para esta ruta." }); } // req.query contiene todos los parámetros de la URL (ej. ?language=es-ES&page=1&with_genres=28) const queryParams = req.query; // Llamamos a la función genérica fetchTmdbData const data = await fetchTmdbData(tmdbEndpoint, queryParams); if (data) { res.json(data); } else { // Esto debería ser capturado por el catch de fetchTmdbData, // pero es una última red de seguridad. res.status(500).json({ error: "No se pudieron obtener datos de TMDB." }); } } catch (error) { // Capturamos cualquier error lanzado por fetchTmdbData console.error("Error en el controlador de TMDB:", error.message); res.status(500).json({ error: "Error interno del servidor al procesar la solicitud.", details: error.message }); } } async function getCacheStream (req, res) { const { locker, id } = req.params; if (!contentCache[`${locker}-get${id}`]) { return res.status(404).json({ error: `No se encontró el contenido para el ID: ${id}` }); } try { const link = contentCache[`${locker}-get${id}`].result; const request = await processVideo(link); //console.log(global.contentCache); res.json({link: request}); } catch (error) { console.error(error); res.status(500).json({ error: 'Error en el formato de respuesta' }); } }; // function cacheLink(id, link) { // // Asegúrate de que 'id' sea una clave válida para guardar el enlace // // Aquí, 'id' debería ser algo como 'streamwish-get0', 'streamwish-get1', etc. // result = `${hostname}/main/${id}`; // // Aquí lo agregamos al cache // global.contentCache[id] = { result: link }; // Guardamos el enlace en el cache // return; // } module.exports = { getCacheStream, getTmdbContent, // Si realmente necesitas separar getStreams y getSerieStreams por lógica distinta, // puedes exportarlos aquí y hacer que internamente llamen a getTmdbContent o // a fetchTmdbData directamente con alguna lógica condicional. // getStreams, // Si es diferente a getTmdbContent // getSerieStreams // Si es diferente a getTmdbContent };