import type { JSX } from "react"
import { notFound } from "next/navigation"
import { getTranslations } from "next-intl/server"
import Link from "next/link"
import { Button } from "@/shared/components/ui/button"
import { EmptyState } from "@/shared/components/ui/empty-state"
import { BarChart3, ArrowLeft } from "lucide-react"
import { getExamById } from "@/modules/exams/data-access"
import { getExamAnalytics } from "@/modules/exams/stats-service"
import { ExamAnalyticsDashboard } from "@/modules/exams/components/exam-analytics-dashboard"
import { requirePermission } from "@/shared/lib/auth-guard"
import { Permissions } from "@/shared/types/permissions"

export const dynamic = "force-dynamic"

export default async function ExamAnalyticsPage({ params }: { params: Promise<{ id: string }> }): Promise<JSX.Element> {
  const { id } = await params
  await requirePermission(Permissions.EXAM_READ)
  const t = await getTranslations("examHomework")

  const [exam, analytics] = await Promise.all([
    getExamById(id),
    getExamAnalytics(id),
  ])

  if (!exam) return notFound()

  return (
    <div className="flex h-full flex-col space-y-6 p-8">
      <div className="flex flex-col justify-between gap-4 md:flex-row md:items-center">
        <div className="min-w-0">
          <div className="flex items-center gap-2">
            <BarChart3 className="h-6 w-6 text-muted-foreground" />
            <h1 className="text-2xl font-bold tracking-tight">{t("exam.analytics.title")}</h1>
          </div>
          <p className="text-muted-foreground truncate">{exam.title}</p>
          <p className="mt-1 text-sm text-muted-foreground">{t("exam.analytics.description")}</p>
        </div>
        <div className="flex items-center gap-2">
          <Button asChild variant="outline">
            <Link href="/teacher/exams/all">
              <ArrowLeft className="mr-2 h-4 w-4" />
              {t("homework.grade.back")}
            </Link>
          </Button>
        </div>
      </div>

      {analytics && analytics.gradedCount > 0 ? (
        <ExamAnalyticsDashboard analytics={analytics} />
      ) : (
        <EmptyState
          title={t("exam.analytics.title")}
          description={t("exam.analytics.noData")}
          icon={BarChart3}
        />
      )}
    </div>
  )
}
