import { notFound, redirect } from "next/navigation";
import { apiFetch, getCurrentUser } from "@/lib/api";
import { MemberProfile, type MemberDetail, type ContactMasked } from "@/components/MemberProfile";

export const dynamic = "force-dynamic";

export default async function MemberDetailPage({ params }: { params: Promise<{ uuid: string }> }) {
  const user = await getCurrentUser();
  if (!user) redirect("/login");
  if (!user.permissions.includes("members.view")) redirect("/dashboard/members");

  const { uuid } = await params;
  const { status, data } = await apiFetch<{ member: MemberDetail; contactMasked: ContactMasked | null }>(
    `/api/members/${uuid}`,
  );
  if (status === 404 || !data?.member) notFound();

  const historyRes = await apiFetch<{ items: { id: number; effective_from: string; to_status_ar: string; from_status_ar: string | null; reason: string; decision_ref: string | null; decided_by: string | null; suspension_until: string | null }[] }>(
    `/api/members/${uuid}/status-history`,
  );
  const statusesRes = await apiFetch<{ items: { code: string; name_ar: string }[] }>(`/api/members/statuses`);
  const positionsRes = await apiFetch<{ items: { id: number; title_ar: string; appointment_decision_ref: string; started_on: string | null; ended_on: string | null; unit_id: number; unit_name: string; unit_kind: string }[] }>(
    `/api/members/${uuid}/positions`,
  );

  return (
    <MemberProfile
      member={data.member}
      contactMasked={data.contactMasked}
      history={historyRes.status === 200 ? (historyRes.data?.items ?? []) : []}
      statuses={statusesRes.status === 200 ? (statusesRes.data?.items ?? []) : []}
      positions={positionsRes.status === 200 ? (positionsRes.data?.items ?? []) : []}
      canManage={user.permissions.includes("members.manage")}
      canSeeContact={user.permissions.includes("members.view_contact_details")}
    />
  );
}
