import { desc, eq } from "drizzle-orm"; import { redirect } from "next/navigation"; import { getTranslations } from "next-intl/server"; import type { CSSProperties } from "react"; import { applyDj } from "@/actions/radio-apply"; import { ContentCard } from "@/components/public/ui"; import { auth } from "@/lib/auth"; import { db, RadioApplications } from "@/lib/db"; import { formatDate } from "@/lib/format-date"; function feedbackStyle(tone: "success" | "error"): CSSProperties { const accent = tone === "error" ? "var(--color-danger)" : "var(--color-primary)"; return { margin: 0, padding: "0.85rem 1rem", borderRadius: "var(--radius-md)", border: `1px solid ${accent}`, color: "var(--color-text-readable, var(--color-text))", fontSize: "0.9rem", fontWeight: 600, background: "var(--color-surface)", borderLeft: `4px solid ${accent}`, }; } export default async function RadioApplyPage({ searchParams, }: { searchParams: Promise<{ submitted?: string; error?: string }>; }) { const session = await auth(); if (!session?.user?.id) redirect("/login"); const t = await getTranslations("pages.radioApply"); const { submitted, error } = await searchParams; const errorMessage = error === "invalid" ? t("errors.invalid") : error === "ratelimit" ? t("errors.ratelimit") : error ? t("errors.error") : null; const userId = Number(session.user.id); // Surface the applicant's most recent application (if any) so they aren't // left guessing. Isolated query: a DB hiccup degrades this to null, not 500. const [existing] = await db .select({ id: RadioApplications.id, status: RadioApplications.status, createdAt: RadioApplications.createdAt, }) .from(RadioApplications) .where(eq(RadioApplications.userId, BigInt(userId))) .orderBy(desc(RadioApplications.id)) .limit(1) .catch(() => []); const submittedDate = existing?.createdAt ? formatDate(existing.createdAt, "date") : null; return (
{submitted === "1" ? (
{t("success.submitted")}
) : null} {errorMessage ? (
{errorMessage}
) : null} {existing ? (

{t("statusLabel")} {existing.status} {submittedDate ? ( {" "} {t("submittedOn", { date: submittedDate })} ) : null}

{t("submitAgain")}

) : null}