'use client'; import { useEffect, useState } from 'react'; import Link from 'next/link'; import MetricObserver from './MetricObserver'; import { ExternalLink } from 'lucide-react'; export default function TopBanner({ initialBanners, rotationSeconds }: { initialBanners: any[], rotationSeconds: number }) { const [currentIndex, setCurrentIndex] = useState(0); useEffect(() => { if (!initialBanners || initialBanners.length <= 1) return; const interval = setInterval(() => { setCurrentIndex(prev => (prev + 1) % initialBanners.length); }, rotationSeconds * 1000); return () => clearInterval(interval); }, [initialBanners, rotationSeconds]); if (!initialBanners || initialBanners.length === 0) return null; const activeBanner = initialBanners[currentIndex]; if (!activeBanner.imagen_destacada_id) return null; const ENDPOINT = process.env.NEXT_PUBLIC_APPWRITE_ENDPOINT || 'https://appwrite.almeira.com.co/v1'; const PROJECT_ID = process.env.NEXT_PUBLIC_APPWRITE_PROJECT_ID || '69b84df5003bd8957c5c'; let imgUrl = activeBanner.og_image_url || null; if (activeBanner.imagen_destacada_id) { if (typeof activeBanner.imagen_destacada_id === 'object' && activeBanner.imagen_destacada_id.bucket_id) { imgUrl = `${ENDPOINT}/storage/buckets/${activeBanner.imagen_destacada_id.bucket_id}/files/${activeBanner.imagen_destacada_id.file_id}/view?project=${PROJECT_ID}`; } else if (typeof activeBanner.imagen_destacada_id === 'string') { // Fallback to 'media' bucket if we only have the ID imgUrl = `${ENDPOINT}/storage/buckets/media/files/${activeBanner.imagen_destacada_id}/view?project=${PROJECT_ID}`; } } if (!imgUrl) return null; const recordClickAndGo = () => { fetch('/api/metrics', { method: 'POST', body: JSON.stringify({ postId: activeBanner.$id, tipo: 'click' }) }); if (activeBanner.url_destino) { window.open(activeBanner.url_destino, '_blank'); } }; return (
{/* Metric Impression Observer resets key on change to fire new impression */}
{/* eslint-disable-next-line @next/next/no-img-element */} {activeBanner.titulo} {activeBanner.url_destino && (
)}
{/* Indicadores */} {initialBanners.length > 1 && (
{initialBanners.map((_: any, idx: number) => (
))}
)}
); }