frontend/src/service/medicalAPIs.js

/**
 * @file Servicio para obtener artículos de APIs médicas reales
 * @description Integra con NewsAPI y otras fuentes para obtener artículos médicos reales
 */

/**
 * @function obtenerArticulosDePubMed
 * @description Obtiene artículos de PubMed (API pública)
 * @async
 * @param {string} query - Término de búsqueda
 * @returns {Promise<Array>} Artículos del servidor PubMed
 */
export async function obtenerArticulosDePubMed(query = 'mental health') {
    try {
        const response = await fetch(
            `https://pubmed.ncbi.nlm.nih.gov/coreapi/v1/search/?query=${encodeURIComponent(query)}&pageSize=20`,
            { method: 'GET', mode: 'cors' }
        );

        if (!response.ok) throw new Error('Error en PubMed');

        const data = await response.json();
        return data.articles || [];
    } catch (error) {
        console.error('Error en PubMed API:', error);
        return [];
    }
}

/**
 * @function obtenerArticulosDeNewsAPI
 * @description Obtiene artículos de NewsAPI (requiere API key)
 * @async
 * @param {string} query - Término de búsqueda
 * @returns {Promise<Array>} Artículos de NewsAPI
 */
export async function obtenerArticulosDeNewsAPI(query = 'mental health medicine') {
    try {
        // NewsAPI requiere API key - usando endpoint público si está disponible
        const apiKey = process.env.REACT_APP_NEWSAPI_KEY || '';

        if (!apiKey) {
            console.warn('NewsAPI key no configurada');
            return [];
        }

        const response = await fetch(
            `https://newsapi.org/v2/everything?q=${encodeURIComponent(query)}&sortBy=publishedAt&language=es&pageSize=20&apiKey=${apiKey}`
        );

        if (!response.ok) throw new Error('Error en NewsAPI');

        const data = await response.json();
        return data.articles || [];
    } catch (error) {
        console.error('Error en NewsAPI:', error);
        return [];
    }
}

/**
 * @function obtenerArticulosDeMedicalAPIs
 * @description Obtiene artículos de APIs médicas públicas
 * @async
 * @returns {Promise<Array>} Artículos médicos
 */
export async function obtenerArticulosDeMedicalAPIs() {
    try {
        // Usando APIs públicas de salud
        const endpoints = [
            {
                url: 'https://api.covid19api.com/',
                mapper: null // Puede adaptarse según necesidad
            }
        ];

        const articulos = [];

        // Obtener de múltiples fuentes
        for (const endpoint of endpoints) {
            try {
                const response = await fetch(endpoint.url);
                if (response.ok) {
                    // Procesar datos según la API
                }
            } catch (error) {
                console.error('Error fetching from:', endpoint.url);
            }
        }

        return articulos;
    } catch (error) {
        console.error('Error obteniendo artículos médicos:', error);
        return [];
    }
}

/**
 * @function obtenerArticulosLocales
 * @description Obtiene artículos de una base de datos local simulada
 * @returns {Array} Artículos locales
 */
export function obtenerArticulosLocales() {
    return [
        {
            id: 1,
            titulo: "Nuevos tratamientos para la ansiedad generalizada",
            descripcion: "Investigadores descubren enfoques innovadores para el tratamiento de trastornos de ansiedad",
            contenido: "Un estudio reciente muestra que las terapias cognitivo-conductuales combinadas con tecnología pueden ser más efectivas.",
            autor: "Journal of Clinical Psychology",
            fuente: "Fuente Médica",
            fecha: new Date(),
            categoria: "Ansiedad",
            imagen: "https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 2,
            titulo: "Importancia de la higiene del sueño en pacientes depresivos",
            descripcion: "Estudio clínico demuestra la relevancia de establecer rutinas de sueño adecuadas",
            contenido: "Los pacientes que mantienen horarios regulares de sueño presentan una reducción del 40% en síntomas depresivos.",
            autor: "Sleep Medicine Reviews",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 86400000),
            categoria: "Sueño",
            imagen: "https://images.unsplash.com/photo-1434086144198-c0ec304386f0?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 3,
            titulo: "Mindfulness y meditación en el tratamiento del estrés",
            descripcion: "Evidencia científica de los beneficios de técnicas de atención plena",
            contenido: "Meta-análisis de 150 estudios confirman que el mindfulness reduce significativamente los niveles de cortisol.",
            autor: "Mindfulness Journal",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 172800000),
            categoria: "Mindfulness",
            imagen: "https://images.unsplash.com/photo-1506126613408-eca07ce68773?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 4,
            titulo: "Ejercicio aeróbico mejora salud mental en adultos",
            descripcion: "Nuevo estudio demuestra correlación entre actividad física y bienestar emocional",
            contenido: "30 minutos de ejercicio diario pueden ser tan efectivos como algunos antidepresivos.",
            autor: "Sports Medicine International",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 259200000),
            categoria: "Ejercicio",
            imagen: "https://images.unsplash.com/photo-1532521185607-c4b7b0b90d00?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 5,
            titulo: "Eje intestino-cerebro: nueva perspectiva en psiquiatría",
            descripcion: "La microbiota intestinal influye directamente en la salud mental",
            contenido: "Nuevas investigaciones revelan que ciertos probióticos pueden mejorar síntomas de depresión.",
            autor: "Gut Microbiota Journal",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 345600000),
            categoria: "Nutrición",
            imagen: "https://images.unsplash.com/photo-1512621776951-a57141f2eefd?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 6,
            titulo: "Gestión del estrés digital en la era moderna",
            descripcion: "Estrategias para mantener la salud mental en un mundo hiperconectado",
            contenido: "Expertos recomiendan establecer límites con la tecnología para prevenir el burnout digital.",
            autor: "Digital Wellness Report",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 432000000),
            categoria: "Estrés",
            imagen: "https://images.unsplash.com/photo-1516534775068-bb8155a6b250?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 7,
            titulo: "Signos de depresión: Guía de reconocimiento temprano",
            descripcion: "Identificar síntomas de depresión a tiempo puede salvar vidas",
            contenido: "Una intervención temprana puede prevenir complicaciones graves y mejorar el pronóstico.",
            autor: "Psychiatry Today",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 518400000),
            categoria: "Depresión",
            imagen: "https://images.unsplash.com/photo-1489749798305-4fea3ba63d60?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        },
        {
            id: 8,
            titulo: "Terapia de pareja efectiva para problemas relacionales",
            descripcion: "Las relaciones saludables son fundamentales para la salud mental",
            contenido: "La terapia de pareja muestra una efectividad del 85% en mejorar la comunicación y el bienestar.",
            autor: "Journal of Couples Therapy",
            fuente: "Fuente Médica",
            fecha: new Date(Date.now() - 604800000),
            categoria: "Relaciones",
            imagen: "https://images.unsplash.com/photo-1529156069898-49953e39b3ac?w=500&h=300&fit=crop",
            url: "https://ejemplo.com"
        }
    ];
}

/**
 * @function procesarArticulosDePubMed
 * @description Formatea artículos de PubMed a nuestro esquema
 * @param {Array} articulos - Artículos crudos
 * @returns {Array} Artículos formateados
 */
export function procesarArticulosDePubMed(articulos) {
    return articulos.map((art, idx) => ({
        id: idx,
        titulo: art.title || 'Sin título',
        descripcion: art.snippet || 'Sin descripción',
        contenido: art.snippet || 'Contenido no disponible',
        autor: art.authors?.join(', ') || 'Autor desconocido',
        fuente: 'PubMed',
        fecha: new Date(art.pub_date || Date.now()),
        categoria: clasificarCategoria(art.title),
        imagen: 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop',
        url: art.uid ? `https://pubmed.ncbi.nlm.nih.gov/${art.uid}/` : '#'
    }));
}

/**
 * @function procesarArticulosDeNewsAPI
 * @description Formatea artículos de NewsAPI a nuestro esquema
 * @param {Array} articulos - Artículos crudos
 * @returns {Array} Artículos formateados
 */
export function procesarArticulosDeNewsAPI(articulos) {
    return articulos.map((art, idx) => ({
        id: idx,
        titulo: art.title || 'Sin título',
        descripcion: art.description || art.content || 'Sin descripción',
        contenido: art.content || art.description || 'Contenido no disponible',
        autor: art.author || art.source?.name || 'Autor desconocido',
        fuente: art.source?.name || 'NewsAPI',
        fecha: new Date(art.publishedAt),
        categoria: clasificarCategoria(art.title + ' ' + (art.description || '')),
        imagen: art.urlToImage || 'https://images.unsplash.com/photo-1576091160550-2173dba999ef?w=500&h=300&fit=crop',
        url: art.url || '#'
    }));
}

/**
 * @function clasificarCategoria
 * @description Clasifica un artículo por su contenido
 * @param {string} texto - Texto del artículo
 * @returns {string} Categoría identificada
 */
function clasificarCategoria(texto) {
    const texto_lower = texto.toLowerCase();
    const categorias = {
        'Ansiedad': ['ansiedad', 'anxiety', 'anxious', 'worry'],
        'Depresión': ['depresión', 'depression', 'depressive', 'depressed'],
        'Ejercicio': ['ejercicio', 'exercise', 'workout', 'physical', 'fitness'],
        'Estrés': ['estrés', 'stress', 'stressed', 'burnout'],
        'Mindfulness': ['mindfulness', 'meditación', 'meditation', 'mindful'],
        'Nutrición': ['nutrición', 'nutrition', 'diet', 'food', 'eat'],
        'Relaciones': ['relación', 'relationship', 'pareja', 'couple', 'family'],
        'Sueño': ['sueño', 'sleep', 'insomnia', 'sleeping']
    };

    for (const [categoria, palabras] of Object.entries(categorias)) {
        if (palabras.some(palabra => texto_lower.includes(palabra))) {
            return categoria;
        }
    }

    return 'Estrés';
}

const medicalAPIs = {
    obtenerArticulosDePubMed,
    obtenerArticulosDeNewsAPI,
    obtenerArticulosDeMedicalAPIs,
    obtenerArticulosLocales,
    procesarArticulosDePubMed,
    procesarArticulosDeNewsAPI
};

export default medicalAPIs;