import Link from "next/link";
import { getServerSession } from "next-auth";
import { notFound } from "next/navigation";
import { AuditPanel } from "../../components/audit-panel";
import { authOptions } from "../../../lib/auth/options";
import { prisma } from "../../../lib/db/prisma";
import { ApprovalButtons } from "../approval-buttons";

export default async function AdhocRecordDetailsPage({ params }: { params: { id: string } }) {
  const session = await getServerSession(authOptions);
  const systemAdmin = session?.user.systemRole === "SYSTEM_ADMIN";
  const canApprove = Boolean(systemAdmin || session?.user.permissions.includes("approve_adhoc"));
  const record = await prisma.adhocRecord.findFirst({
    where: {
      id: params.id,
      ...(systemAdmin ? {} : canApprove ? { organizationId: session?.user.organizationId! } : { organizationId: session?.user.organizationId!, userId: session?.user.id })
    },
    include: { user: true, reviewedBy: true, organization: true }
  });
  if (!record) notFound();

  return (
    <div>
      <Link className="text-sm font-semibold text-brand-secondary" href="/admin/adhoc-records">Back to adhoc records</Link>
      <div className="mt-3 flex flex-wrap items-start justify-between gap-4">
        <div>
          <h1 className="text-3xl font-semibold">Adhoc record</h1>
          <p className="mt-2 text-slate-600">{record.user.name ?? record.user.email} · {record.date.toLocaleDateString()} · {record.status}</p>
        </div>
        {canApprove && record.status === "pending" ? <ApprovalButtons id={record.id} /> : null}
      </div>

      <section className="mt-6 grid gap-3 rounded-lg border border-brand-primary/20 bg-white p-5 text-sm shadow-sm md:grid-cols-2">
        <p><span className="font-semibold">Organization:</span> {record.organization.name}</p>
        <p><span className="font-semibold">Employee:</span> {record.user.name ?? record.user.email}</p>
        <p><span className="font-semibold">Email:</span> {record.user.email}</p>
        <p><span className="font-semibold">Hours:</span> {record.hours.toString()}</p>
        <p><span className="font-semibold">Status:</span> {record.status}</p>
        <p><span className="font-semibold">Reviewed by:</span> {record.reviewedBy?.name ?? record.reviewedBy?.email ?? "-"}</p>
        <p className="md:col-span-2"><span className="font-semibold">Reason:</span> {record.reason}</p>
        {record.rejectionReason ? <p className="md:col-span-2"><span className="font-semibold">Rejection:</span> {record.rejectionReason}</p> : null}
      </section>
      <AuditPanel targetId={record.id} targetType="adhoc_record" title="Adhoc audit events" />
    </div>
  );
}
