"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
)}
)}
);
}