diff --git a/src/app/(frontend)/qualification/page.tsx b/src/app/(frontend)/qualification/page.tsx new file mode 100644 index 0000000..5fd465a --- /dev/null +++ b/src/app/(frontend)/qualification/page.tsx @@ -0,0 +1,70 @@ +import type { Metadata } from "next"; +import config from "@payload-config"; +import { getPayload } from "payload"; +import { headers as nextHeaders } from "next/headers"; +import { redirect } from "next/navigation"; +import { Crosshair } from "lucide-react"; + +import type { AimTrainerStats } from "@/app/(frontend)/qualification/actions"; +import { AimTrainerArena } from "@/components/frontend/qualification/AimTrainerArena"; + +export const metadata: Metadata = { + title: "Qualification Course — Polaris Task Force", + description: "Complete a timed qualification course to sharpen your marksmanship and earn XP.", +}; + +export default async function QualificationPage() { + const headers = await nextHeaders(); + const payloadConfig = await config; + const payload = await getPayload({ config: payloadConfig }); + const { user } = await payload.auth({ headers, canSetHeaders: false }); + + if (!user) { + redirect(`/login?returnTo=${encodeURIComponent("/qualification")}`); + } + + const profileRes = await payload.find({ + collection: "profiles", + where: { user: { equals: user.id as number } }, + limit: 1, + depth: 0, + overrideAccess: true, + select: { + progression: { + minigames: true, + }, + }, + }); + + const aimTrainer = profileRes.docs[0]?.progression?.minigames?.aimTrainer ?? {}; + const stats: AimTrainerStats = { + gamesPlayed: aimTrainer.gamesPlayed ?? 0, + bestScore: aimTrainer.bestScore ?? 0, + recruitBestScore: aimTrainer.recruitBestScore ?? 0, + veteranBestScore: aimTrainer.veteranBestScore ?? 0, + eliteBestScore: aimTrainer.eliteBestScore ?? 0, + recruitBestAccuracy: aimTrainer.recruitBestAccuracy ?? 0, + veteranBestAccuracy: aimTrainer.veteranBestAccuracy ?? 0, + eliteBestAccuracy: aimTrainer.eliteBestAccuracy ?? 0, + aimTrainerXp: aimTrainer.xpEarned ?? 0, + xpEarned: 0, + score: 0, + accuracy: 0, + }; + + return ( +
+
+
+ +

Qualification Course

+
+

+ Acquire targets, place your shots, and qualify under pressure. +

+
+ + +
+ ); +}