import { BookOpen, Heart } from "lucide-react";
import Link from "next/link";
import { requireStudent } from "@/lib/auth/session";
import { prisma } from "@/lib/db/prisma";
import { StudentHeader } from "@/components/student/student-header";

export const dynamic = "force-dynamic";

export default async function StudentPortalPage({ searchParams }: { searchParams: Promise<{ q?: string; progress?: string; favorite?: string }> }) {
  const session = await requireStudent();
  const student = await prisma.student.findUnique({ where: { userId: session.user.id }, include: { class: true } });
  if (!student) return <main className="p-10">Profil siswa belum terhubung. Hubungi guru.</main>;
  const query = await searchParams;
  const q = query.q?.trim().slice(0, 100) ?? "";
  const progress = ["NOT_STARTED", "IN_PROGRESS", "COMPLETED"].includes(query.progress ?? "") ? query.progress : undefined;
  const progressFilter = progress === "NOT_STARTED"
    ? { OR: [{ progresses: { none: { userId: session.user.id } } }, { progresses: { some: { userId: session.user.id, status: "NOT_STARTED" as const } } }] }
    : progress ? { progresses: { some: { userId: session.user.id, status: progress as "IN_PROGRESS" | "COMPLETED" } } } : {};
  const [materials, unread] = await Promise.all([
    prisma.material.findMany({
      where: {
        status: "PUBLISHED",
        AND: [
          { OR: [{ visibility: "PUBLIC" }, { visibility: "STUDENT_ONLY", classId: student.classId }] },
          ...(q ? [{ OR: [{ title: { contains: q } }, { description: { contains: q } }, { subject: { name: { contains: q } } }] }] : []),
          progressFilter,
        ],
        ...(query.favorite === "1" ? { favorites: { some: { userId: session.user.id } } } : {}),
      },
      include: { subject: true, favorites: { where: { userId: session.user.id } }, progresses: { where: { userId: session.user.id } } },
      orderBy: { publishedAt: "desc" },
    }),
    prisma.notification.count({ where: { userId: session.user.id, readAt: null } }),
  ]);
  return <><StudentHeader name={student.name} className={student.class.name} unread={unread}/><main className="mx-auto min-h-svh max-w-7xl px-5 py-12">
    <form className="mt-8 grid gap-3 rounded-2xl border bg-white p-4 sm:grid-cols-4 dark:bg-slate-900"><input name="q" defaultValue={q} placeholder="Cari materi atau mata pelajaran" className="h-11 rounded-xl border px-4 sm:col-span-2 dark:bg-slate-950"/><select name="progress" defaultValue={progress ?? ""} className="h-11 rounded-xl border px-3 dark:bg-slate-950"><option value="">Semua progress</option><option value="NOT_STARTED">Belum mulai</option><option value="IN_PROGRESS">Sedang belajar</option><option value="COMPLETED">Selesai</option></select><label className="flex h-11 items-center gap-2 rounded-xl border px-3"><input type="checkbox" name="favorite" value="1" defaultChecked={query.favorite === "1"}/> Hanya favorit</label><button className="rounded-xl bg-emerald-500 px-4 py-2 font-bold text-white sm:col-span-4 sm:justify-self-start">Terapkan filter</button></form>
    <section className="mt-8 grid gap-5 md:grid-cols-2 lg:grid-cols-3">{materials.map((item) => <Link key={item.id} href={`/materi/${item.slug}`} className="rounded-2xl border bg-white p-6 transition hover:-translate-y-1 hover:shadow-lg dark:bg-slate-900"><div className="flex justify-between"><BookOpen className="size-5 text-emerald-500"/>{item.favorites.length > 0 && <Heart className="size-5 fill-rose-500 text-rose-500"/>}</div><h2 className="mt-5 text-xl font-bold">{item.title}</h2><p className="mt-2 text-sm text-slate-500">{item.subject.name} · {item.visibility === "STUDENT_ONLY" ? "Khusus kelas" : "Publik"}</p><p className="mt-5 text-xs font-bold text-emerald-600">{item.progresses[0]?.status ?? "NOT_STARTED"}</p></Link>)}</section>
    {!materials.length && <p className="mt-12 text-center text-slate-500">Tidak ada materi yang cocok.</p>}
  </main></>;
}
