"use client"; import { Music2, Link2, Unlink, Loader2, AlertTriangle } from "lucide-react"; import { useEffect, useState } from "react"; import { useRouter, useSearchParams } from "next/navigation"; import StatCard from "@/components/StatCard"; import StatsChart from "@/components/StatsCharts"; interface TikTokStats { followers: number; likes: number; videoCount: number; views: number; displayName: string; avatarUrl: string; plan: "free" | "pro" | "elite" | "team"; } export default function TikTokPage() { const [stats, setStats] = useState(null); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); const [disconnecting, setDisconnecting] = useState(false); const searchParams = useSearchParams(); const router = useRouter(); async function loadStats() { setLoading(true); setError(null); try { const res = await fetch("/api/tiktok/stats"); if (res.status === 404) { setStats(null); } else if (!res.ok) { const data = await res.json(); setError(data.error ?? "Erreur inconnue"); } else { const data = await res.json(); setStats(data); } } catch { setError("Erreur réseau"); } finally { setLoading(false); } } useEffect(() => { loadStats(); }, []); async function handleDisconnect() { setDisconnecting(true); try { await fetch("/api/tiktok/disconnect", { method: "POST" }); setStats(null); router.replace("/tiktok"); } finally { setDisconnecting(false); } } const urlError = searchParams.get("error"); return (
{/* Header */}
Plateforme

TikTok

{stats && !loading && ( )}
{/* Erreur URL */} {urlError && (
{urlError === "access_denied" && "Accès refusé par TikTok."} {urlError === "token_exchange" && "Erreur lors de l'échange du token."} {urlError === "session_error" && "Erreur de session."} {!["access_denied", "token_exchange", "session_error"].includes(urlError) && `Erreur : ${urlError}`}
)} {/* Chargement */} {loading && (
Chargement...
)} {/* Connecté : stats */} {!loading && stats && ( <> {stats.displayName && (
{stats.avatarUrl && ( avatar )} {stats.displayName} Connecté
)}
0 ? Math.round(stats.likes / stats.videoCount).toLocaleString("fr-FR") : "—"} sub="Moy. likes par vidéo" accent="gold" />
{/* Graph */} )} {!loading && !stats && !error && (

Connectez votre compte TikTok
pour afficher vos statistiques

Connecter TikTok
)} {!loading && error && (

{error}

)}
); }