"use client"; import PageHeading from "../ui/PageHeading"; import { useEffect, useState } from "react"; import { useRouter } from "next/navigation"; import { authFetchOrThrow, getApiBase, getToken, UnauthorizedError } from "../lib/auth"; type Profile = { username?: string; }; export default function FeedbackPage() { const router = useRouter(); const [profile, setProfile] = useState(null); const [category, setCategory] = useState("bug"); const [message, setMessage] = useState(""); const [status, setStatus] = useState(null); const [submitting, setSubmitting] = useState(false); useEffect(() => { if (!getToken()) { router.push("/login"); return; } const load = async () => { try { const baseUrl = getApiBase(); const response = await authFetchOrThrow(`${baseUrl}/auth/me`); if (!response.ok) { throw new Error("Could not load profile."); } const data = await response.json(); setProfile({ username: data?.username }); } catch (error) { if (error instanceof UnauthorizedError) { router.push("/login"); return; } console.error(error); } }; void load(); }, [router]); const submit = async (event: React.FormEvent) => { event.preventDefault(); setStatus(null); if (!message.trim()) { setStatus("Please write a short message before sending."); return; } setSubmitting(true); try { const baseUrl = getApiBase(); const response = await authFetchOrThrow(`${baseUrl}/feedback`, { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ type: category, message: message.trim(), }), }); if (!response.ok) { const text = await response.text(); throw new Error(text || `Request failed: ${response.status}`); } setMessage(""); setStatus("Thanks! Your message has been sent."); } catch (error) { if (error instanceof UnauthorizedError) { router.push("/login"); return; } console.error(error); setStatus("That did not send. Please try again."); } finally { setSubmitting(false); } }; return (