import { notFound, redirect } from "next/navigation";
import { hasCourseAccess, hasPaidRegistration } from "@/lib/access";
import { getCurrentUser } from "@/lib/auth";
import { getLevel } from "@/lib/courses";
import { db } from "@/lib/db";
import { LessonView } from "@/components/LessonView";

export default async function LevelPage({
  params,
}: {
  params: Promise<{ slug: string; level: string }>;
}) {
  const { slug, level: levelId } = await params;
  const found = getLevel(slug, levelId);
  if (!found) notFound();
  const user = await getCurrentUser();
  if (!user) redirect(`/login?next=/courses/${slug}/${levelId}`);
  if (!hasPaidRegistration(user)) redirect("/pay");
  if (!(await hasCourseAccess(user, slug))) redirect(`/pay?course=${slug}`);

  if (found.prev) {
    const prevQuiz = db
      .prepare(
        "SELECT passed FROM quiz_attempts WHERE user_id = ? AND course_slug = ? AND level_id = ?"
      )
      .get(user.id, slug, found.prev.id) as { passed: number } | undefined;
    if (!prevQuiz?.passed) redirect(`/courses/${slug}`);
  }

  return (
    <LessonView
      course={found.course}
      level={found.level}
      index={found.index}
      prevId={found.prev?.id ?? null}
      nextId={found.next?.id ?? null}
    />
  );
}
