import Link from "next/link";
import { notFound } from "next/navigation";
import { requireUser } from "@/lib/auth/session";
import { requireCompleteStudentProfile } from "@/lib/auth/student-onboarding";
import { createClient } from "@/lib/supabase/server";
import { Button } from "@/components/ui/button";
import type { ApplicationDocument } from "@/lib/types";
import { DocumentsClient, type DocumentWithUrl } from "./documents-client";

export default async function PortalDocumentsPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;
  const user = await requireUser();
  if (user.role?.slug === "student") {
    await requireCompleteStudentProfile(user.id);
  }
  const supabase = await createClient();

  // RLS limits visibility to the student's own application.
  const { data: application } = await supabase
    .from("student_applications")
    .select("applicant_name")
    .eq("id", id)
    .single();

  if (!application) notFound();

  const { data: docs } = await supabase
    .from("application_documents")
    .select("*")
    .eq("student_application_id", id)
    .order("created_at", { ascending: false });

  const documents = (docs ?? []) as ApplicationDocument[];

  const docsWithUrls: DocumentWithUrl[] = await Promise.all(
    documents.map(async (doc) => {
      const { data } = await supabase.storage
        .from("documents")
        .createSignedUrl(doc.file_path, 3600);
      return { ...doc, signedUrl: data?.signedUrl ?? null };
    }),
  );

  return (
    <div className="space-y-6">
      <div className="flex flex-wrap items-center justify-between gap-4">
        <div className="space-y-1">
          <h1 className="text-2xl font-semibold text-brand-navy">
            My Documents
          </h1>
          <p className="text-sm text-muted-foreground">
            Upload the documents your counsellor requested. They&apos;ll review
            and mark each as verified.
          </p>
        </div>
        <Button asChild variant="outline">
          <Link href={`/portal/applications/${id}`}>Back to application</Link>
        </Button>
      </div>

      <DocumentsClient applicationId={id} documents={docsWithUrls} />
    </div>
  );
}
