import BreadCrumbLink from "@/layouts/shared/page.breadcrumbLink";
import {
  listMemberAccess,
  listMemberAccessRoles,
  type MemberAccessRole,
  type MemberAccessRow,
} from "@/lib/features/members/access";
import { getMembershipFilterOptions } from "@/lib/features/members/query";
import { createRoleProtectedLoader } from "@/lib/features/protectedFetcher";
import { FEATURE_SLUGS } from "@/lib/role-helpers";
import type { Route } from "../../../layouts/+types/members.layout";
import MemberAccessClientPage from "./_client";

export const handle = {
  breadcrumb: () => (
    <BreadCrumbLink
      links={[{ label: "Accounts", to: "/admin/members" }, { label: "Access" }]}
    />
  ),
};

export const loader = createRoleProtectedLoader(
  FEATURE_SLUGS.members,
  "read",
  async ({ request }) => {
    const headers = { Cookie: request.headers.get("Cookie") ?? "" };
    // Both lists come from Core2; the endpoint itself is super-admin only, so a
    // non-super-admin lands on an empty screen rather than a partial one.
    const [accessRes, optionsRes, rolesRes] = await Promise.all([
      listMemberAccess(headers),
      getMembershipFilterOptions(headers),
      listMemberAccessRoles(headers),
    ]);
    return { accessRes, optionsRes, rolesRes };
  },
);

const MemberAccessPage: React.FC<Route.ComponentProps> = ({ loaderData }) => {
  const { accessRes, optionsRes, rolesRes } = loaderData as unknown as {
    rolesRes?: { success: boolean; data?: { roles: MemberAccessRole[] } };
    accessRes?: { success: boolean; data?: { access: MemberAccessRow[] } };
    optionsRes?: {
      success: boolean;
      data?: {
        accountTypes: { id: string; name: string }[];
        accountStatuses: { id: string; name: string }[];
      };
    };
  };

  return (
    <MemberAccessClientPage
      rows={accessRes?.success ? (accessRes.data?.access ?? []) : []}
      accountTypes={optionsRes?.data?.accountTypes ?? []}
      accountStatuses={optionsRes?.data?.accountStatuses ?? []}
      roles={rolesRes?.success ? (rolesRes.data?.roles ?? []) : []}
    />
  );
};

export default MemberAccessPage;
