const { getIdType } = require('../utils/idType'); const { getHandlersForId } = require('../handlers/index'); const { getStreamsFromCuevana } = require('../services/cuevanaService'); const { getStreamsFromPeliplus } = require('../services/peliplusService.test'); const { getMoviesFromCinecalidadrs } = require('../services/cinecalidad rs.js'); async function getStreams(req, res) { try { const id = req.params.id; const type = 'movie'; const handlers = getHandlersForId(getIdType(id)); if (handlers.length === 0) { return res.status(400).json({ error: "Tipo de ID no soportado" }); } let movieData = null; // Ejecutar los handlers uno por uno hasta que uno funcione for (const handler of handlers) { if (handler == 'tmdb') { movieData = await handler(id, type); } else { movieData = await handler(id); } if (movieData) break; } if (!movieData) { return res.status(404).json({ error: "PelĂ­cula no encontrada" }); } const [cuevanaResult, peliplusResult, cinecalidadResult] = await Promise.allSettled([ getStreamsFromCuevana(movieData), getStreamsFromPeliplus(movieData), getMoviesFromCinecalidadrs(movieData) ]); const allStreams = []; // Cuevana if (cuevanaResult.status === 'fulfilled') { allStreams.push(...cuevanaResult.value); } else { console.error("Error al obtener streams de Cuevana:", cuevanaResult.reason); } // Peliplus if (peliplusResult.status === 'fulfilled' && peliplusResult.value?.opciones) { allStreams.push(...peliplusResult.value.opciones); } else { console.error("Error al obtener streams de Peliplus:", peliplusResult.reason); } // Cinecalidad if (cinecalidadResult.status === 'fulfilled') { allStreams.push(...cinecalidadResult.value); } else { console.error("Error al obtener streams de Cinecalidad:", cinecalidadResult.reason); } res.json({ streams: allStreams }); } catch (error) { console.error(error.message); res.status(500).json({ error: "Error interno del servidor" }); } } async function getSerieStreams(req, res) { try { const decodedId = decodeURIComponent(req.params.id); const [imdbId, seasonStr, episodeStr] = decodedId.split(':'); const season = parseInt(seasonStr, 10) || 1; const episode = parseInt(episodeStr, 10) || 1; const type = 'series'; const handlers = getHandlersForId(getIdType(imdbId)); if (handlers.length === 0) { return res.status(400).json({ error: "Tipo de ID no soportado" }); } let serieData = null; for (const handler of handlers) { if (handler == 'tmdb') { serieData = await handler(imdbId, type); } else { serieData = await handler(imdbId); } if (serieData && serieData.type === 'tv') break; } if (!serieData || serieData.type !== 'tv') { return res.status(404).json({ error: "Serie no encontrada o tipo incorrecto" }); } const [cuevanaStreams, peliplusResult] = await Promise.allSettled([ getStreamsFromCuevana(serieData, { season, episode }), getStreamsFromPeliplus(serieData, { season, episode }) ]); const allStreams = []; if (cuevanaStreams.status === 'fulfilled') { allStreams.push(...cuevanaStreams.value); } else { console.error("Error al obtener streams de Cuevana:", cuevanaStreams.reason); } if (peliplusResult.status === 'fulfilled' && peliplusResult.value?.opciones) { allStreams.push(...peliplusResult.value.opciones); } else { console.error("Error al obtener streams de Peliplus:", peliplusResult.reason); } res.json({ streams: allStreams }); } catch (error) { console.trace(error); console.error("Error interno en getSerieStreams:", error.message); res.status(500).json({ error: "Error interno del servidor" }); } } module.exports = { getStreams, getSerieStreams };