/** * Hook para obtener estadísticas de contenido */ import { useState, useEffect } from 'react'; import axios from 'axios'; const API_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000'; const api = axios.create({ baseURL: `${API_URL}/api`, headers: { 'Content-Type': 'application/json', }, }); // Interceptor para añadir token api.interceptors.request.use((config) => { const token = localStorage.getItem('admin_token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }); export function useContentStats() { const [stats, setStats] = useState({ protocols: 0, protocolsPublished: 0, guides: 0, guidesPublished: 0, drugs: 0, drugsPublished: 0, checklists: 0, checklistsPublished: 0, }); const [isLoading, setIsLoading] = useState(true); useEffect(() => { async function fetchStats() { try { const response = await api.get('/stats/content'); const data = response.data; console.log('📊 Estadísticas recibidas:', data); // El backend ahora devuelve el formato esperado directamente setStats({ protocols: data.protocols || 0, protocolsPublished: data.protocolsPublished || 0, guides: data.guides || 0, guidesPublished: data.guidesPublished || 0, drugs: data.drugs || 0, drugsPublished: data.drugsPublished || 0, checklists: data.checklists || 0, checklistsPublished: data.checklistsPublished || 0, }); console.log('✅ Estadísticas cargadas correctamente'); } catch (error: any) { console.error('❌ Error cargando estadísticas:', error); console.error('Detalles del error:', error.response?.data || error.message); console.error('Status:', error.response?.status); // Si es error 401, el token puede estar expirado if (error.response?.status === 401) { console.warn('⚠️ Token expirado o inválido. Por favor, inicia sesión nuevamente.'); } // Mantener valores por defecto (0) setStats({ protocols: 0, protocolsPublished: 0, guides: 0, guidesPublished: 0, drugs: 0, drugsPublished: 0, checklists: 0, checklistsPublished: 0, }); } finally { setIsLoading(false); } } fetchStats(); }, []); return { stats, isLoading }; }