import { headers } from "next/headers";
import { redirect } from "next/navigation";
import { Suspense } from "react";

import { CustomerImpersonateScreen } from "@/app/customer/_components/customer-impersonate-screen";
import {
  defaultCustomerTenant,
  isPlatformApexHost,
  resolveCustomerTenantSlug,
  resolveHostnameFromHeaders,
  resolveTenantFromHost,
} from "@/lib/tenant";

type PageProps = {
  searchParams: Promise<{ customer_uid?: string; customer_id?: string; impersonation_token?: string }>;
};

/** Host-style `/customer/impersonate` on corporate subdomains. */
export default async function CustomerImpersonatePage({ searchParams }: PageProps) {
  const headersList = await headers();
  const hostname = resolveHostnameFromHeaders(headersList);
  const query = await searchParams;
  const hostTenant = resolveTenantFromHost(hostname);

  if (isPlatformApexHost(hostname) && !hostTenant) {
    // Admin impersonation must go through the dashboard BFF (sets shared-domain cookies).
    const params = new URLSearchParams();
    if (query.customer_id) params.set("id", query.customer_id);
    if (query.customer_uid) params.set("customer_uid", query.customer_uid);
    redirect(`/dashboard/customers${params.toString() ? `?${params.toString()}` : ""}`);
  }

  const tenant =
    resolveCustomerTenantSlug("/customer/impersonate", hostname) ?? hostTenant ?? defaultCustomerTenant();

  return (
    <Suspense fallback={null}>
      <CustomerImpersonateScreen tenant={tenant} />
    </Suspense>
  );
}
