import {
  LoginPage as LoginPageComponent,
  type LoginStep,
} from "@/components/auth/login-page";

type LoginPageSearchParams = Promise<{
  step?: string | string[];
  email?: string | string[];
}>;

function getFirstSearchParamValue(value?: string | string[]) {
  return Array.isArray(value) ? value[0] : value;
}

function parseLoginStep(step?: string): LoginStep {
  const normalizedStep = step?.trim().toLowerCase().replace(/[\s_-]+/g, "");

  switch (normalizedStep) {
    case "login":
    case "signin":
    case "credentials":
      return "credentials";
    case "otp":
    case "verifyotp":
      return "otp";
    case "forgot":
    case "forgotpassword":
      return "forgotPassword";
    case "reset":
    case "resetpassword":
      return "resetPassword";
    default:
      return "credentials";
  }
}

export default async function LoginPage({
  searchParams,
}: {
  searchParams: LoginPageSearchParams;
}) {
  const resolvedSearchParams = await searchParams;
  const initialEmail = getFirstSearchParamValue(resolvedSearchParams.email) || "";
  const parsedStep = parseLoginStep(
    getFirstSearchParamValue(resolvedSearchParams.step),
  );
  const initialStep =
    (parsedStep === "otp" || parsedStep === "resetPassword") && !initialEmail
      ? "credentials"
      : parsedStep;

  return (
    <LoginPageComponent
      key={`${initialStep}:${initialEmail}`}
      initialStep={initialStep}
      initialEmail={initialEmail}
    />
  );
}
