import Link from "next/link";
import { notFound } from "next/navigation";
import { createClient } from "@/lib/supabase/server";
import { PageHeader } from "@/components/layout/page-header";
import { Button } from "@/components/ui/button";
import type { ApplicationDocument } from "@/lib/types";
import { DocumentsClient, type DocumentWithUrl } from "./documents-client";

export default async function StudentDocumentsPage({
  params,
}: {
  params: Promise<{ id: string }>;
}) {
  const { id } = await params;
  const supabase = await createClient();

  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>
      <PageHeader
        title={`Documents — ${application.applicant_name}`}
        breadcrumb="Application / Student / Documents"
        action={
          <Button asChild variant="outline">
            <Link href={`/applications/student/${id}`}>Back to application</Link>
          </Button>
        }
      />
      <DocumentsClient applicationId={id} documents={docsWithUrls} />
    </div>
  );
}
