"use client"; import { Clock, Eye, Heart, MessageSquare, MousePointerClick, TrendingUp, } from "lucide-react"; import { useEffect, useState } from "react"; import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"; import { Skeleton } from "@/components/ui/skeleton"; import { useSession } from "@/lib/hooks/use-session"; interface AdAnalytics { ad_id: number; impressions: number; clicks: number; ctr: number; avg_view_duration: number; bounce_rate: number; inquiries: number; favorites: number; conversion_rate: number; time_to_sell: number | null; last_updated: Date; } interface Listing { listing_id: number; item_name: string; listing_status: string; } export function AnalyticsDashboard() { const { user } = useSession(); const [listings, setListings] = useState([]); const [selectedAd, setSelectedAd] = useState(null); const [analytics, setAnalytics] = useState(null); const [loading, setLoading] = useState(true); useEffect(() => { if (user?.userId) { loadUserListings(); } }, [user?.userId, loadUserListings]); useEffect(() => { if (selectedAd) { loadAnalytics(selectedAd); } }, [selectedAd, loadAnalytics]); const loadUserListings = async () => { setLoading(true); try { const res = await fetch("/api/listings/my"); if (res.ok) { const data = await res.json(); setListings(data.listings || []); if (data.listings && data.listings.length > 0) { setSelectedAd(data.listings[0].listing_id); } } } catch (error) { console.error("Erro ao carregar anúncios:", error); } finally { setLoading(false); } }; const loadAnalytics = async (adId: number) => { try { const res = await fetch(`/api/telemetry/analytics?adId=${adId}`); if (res.ok) { const data = await res.json(); setAnalytics(data.analytics); } } catch (error) { console.error("Erro ao carregar analytics:", error); } }; if (!user) { return (

Faça login para ver suas analytics

); } if (loading) { return (
{Array.from({ length: 6 }).map((_, i) => ( ))}
); } if (listings.length === 0) { return (

Você ainda não tem anúncios. Crie um anúncio para ver as analytics.

); } return (

Analytics dos Anúncios

Acompanhe o desempenho dos seus anúncios

{/* Seletor de anúncio */}
{/* Métricas */} {analytics && (
Impressões
{analytics.impressions}

Visualizações do anúncio

Cliques
{analytics.clicks}

CTR: {analytics.ctr.toFixed(2)}%

Duração Média
{analytics.avg_view_duration.toFixed(1)}s

Tempo médio de visualização

Bounce Rate
{analytics.bounce_rate.toFixed(1)}%

Usuários que saíram em menos de 3s

Inquiries
{analytics.inquiries}

Mensagens recebidas

Favoritos
{analytics.favorites}

Usuários que favoritaram

{analytics.conversion_rate > 0 && ( Taxa de Conversão
{analytics.conversion_rate.toFixed(2)}%

Taxa de vendas

)} {analytics.time_to_sell && ( Tempo até Venda
{Math.round(analytics.time_to_sell)}h

Tempo médio até ser vendido

)}
)}
); }