"use client"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; export default function AnilistCallbackPage() { const router = useRouter(); const [status, setStatus] = useState<"loading" | "success" | "error">("loading"); const [message, setMessage] = useState(""); useEffect(() => { async function handleCallback() { const hash = window.location.hash.slice(1); // remove leading # const params = new URLSearchParams(hash); const accessToken = params.get("access_token"); if (!accessToken) { setStatus("error"); setMessage("Aucun token trouvé dans l'URL de callback."); return; } try { // Read existing settings to preserve client_id const existingResp = await fetch("/api/settings/anilist").catch(() => null); const existing = existingResp?.ok ? await existingResp.json().catch(() => ({})) : {}; const save = (extra: Record) => fetch("/api/settings/anilist", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ value: { ...existing, access_token: accessToken, ...extra } }), }); const saveResp = await save({}); if (!saveResp.ok) throw new Error("Impossible de sauvegarder le token"); // Auto-fetch user info to populate user_id const statusResp = await fetch("/api/anilist/status"); if (statusResp.ok) { const data = await statusResp.json(); if (data.user_id) { await save({ user_id: data.user_id }); } setMessage(`Connecté en tant que ${data.username}`); } else { setMessage("Token sauvegardé."); } setStatus("success"); setTimeout(() => router.push("/settings?tab=anilist"), 2000); } catch (e) { setStatus("error"); setMessage(e instanceof Error ? e.message : "Erreur inconnue"); } } handleCallback(); }, [router]); return (
{status === "loading" && ( <>

Connexion AniList en cours…

)} {status === "success" && ( <>

{message}

Redirection vers les paramètres…

)} {status === "error" && ( <>

{message}

Retour aux paramètres )}
); }