import BreadCrumbLink from "@/layouts/shared/page.breadcrumbLink";
import { redirect } from "react-router";
import { createRoleProtectedLoader } from "@/lib/features/protectedFetcher";
import { FEATURE_SLUGS, getCheckedAccess } from "@/lib/role-helpers";
import ContactInPromoCodeClient from "./_client";

export const handle = {
  breadcrumb: ({
    params,
  }: {
    params: {
      campaignId: string;
      promoCodeId: string;
      membershipNumber: string;
      contactId: string;
    };
  }) => (
    <BreadCrumbLink
      links={[
        { label: "Promo Codes" },
        { label: "Campaigns", to: "/admin/promo-code-campaigns" },
        {
          label: "Promo Code",
          to: `/admin/promo-code-campaigns/${params.campaignId}/promo-codes/${params.promoCodeId}`,
        },
        {
          label: `Member #${params.membershipNumber}`,
          to: `/admin/promo-code-campaigns/${params.campaignId}/promo-codes/${params.promoCodeId}/members/${params.membershipNumber}`,
        },
        { label: `Contact #${params.contactId}` },
      ]}
    />
  ),
};

export const loader = createRoleProtectedLoader(
  FEATURE_SLUGS.promoCodeCampaigns,
  "read",
  async ({ request, params }) => {
    const { campaignId, promoCodeId, membershipNumber, contactId } = params as {
      campaignId: string;
      promoCodeId: string;
      membershipNumber: string;
      contactId: string;
    };

    // Same hand-off as the membership level: the member module owns the contact
    // page (sessions, activity logs, saved searches, CRM), so don't keep a
    // second copy of it here.
    const from = new URL(request.url).searchParams.get("from");
    const target = new URLSearchParams();
    target.set(
      "from",
      `/admin/promo-code-campaigns/${campaignId}/promo-codes/${promoCodeId}${
        from ? `?from=${encodeURIComponent(from)}` : ""
      }`,
    );
    target.set("fromLabel", promoCodeId);

    throw redirect(
      `/admin/members/${membershipNumber}/${contactId}?${target.toString()}`,
    );
  },
);

// The loader always redirects; nothing renders here.
export default function Page() {
  return null;
}
