import ModuleRunner from "@/components/ModuleRunner";
import { tryReadRunContext, verifyRunContextToken } from "@/lib/run-context";
import { redirect } from "next/navigation";

type SearchParams = Record<string, string | string[] | undefined>;

const config = {
  mode: "quick",
  label: "Quick Touch Module",
  steps: ["verify"],
  scanLabs: [],
  backgroundLabs: ["deviceContext"],
  verifyLabs: ["touchZone", "multiTouch", "pixelDrop"],
  scanTitle: "Quick Scan",
  scanDescription: "Collect the device identity as part of quick verification.",
  verifyTitle: "Touch & Display Verification",
  verifyDescription:
    "Run touchscreen, multitouch, and pixel drop checks.",
};

function getImeiFromSearchParams(searchParams: SearchParams) {
  const value = searchParams.imei || searchParams.IMEI;

  if (Array.isArray(value)) {
    return value.find(Boolean) || "";
  }

  return value || "";
}

function getRedirectUrlFromSearchParams(searchParams: SearchParams) {
  const value =
    searchParams.redirect_url ||
    searchParams.redirectUrl ||
    searchParams.redirectURL;

  if (Array.isArray(value)) {
    return value.find(Boolean) || "";
  }

  return value || "";
}

function getContextTokenFromSearchParams(searchParams: SearchParams) {
  const value = searchParams.context_token || searchParams.contextToken;

  if (Array.isArray(value)) {
    return value.find(Boolean) || "";
  }

  return value || "";
}

export default async function QuickBrandRunPage({
  params,
  searchParams,
}: {
  params: Promise<{ brand: string }>;
  searchParams: Promise<SearchParams>;
}) {
  const [{ brand }, query] = await Promise.all([params, searchParams]);
  const imei = getImeiFromSearchParams(query);
  const redirectUrl = getRedirectUrlFromSearchParams(query);
  const contextToken = getContextTokenFromSearchParams(query);
  let resolvedRedirectUrl = redirectUrl;

  if (imei) {
    const context = await tryReadRunContext({
      partner_name: brand,
      imei,
    });

    if (context) {
      resolvedRedirectUrl = context.redirect_url || resolvedRedirectUrl;
    } else {
      try {
        const tokenContext = verifyRunContextToken(contextToken);

        if (
          tokenContext.imei !== imei ||
          tokenContext.partner_name.toLowerCase() !== brand.toLowerCase()
        ) {
          throw new Error("Run context token does not match URL");
        }

        resolvedRedirectUrl =
          tokenContext.redirect_url?.trim() || resolvedRedirectUrl;
      } catch {
        redirect("/invalid-url");
      }
    }
  } else if (contextToken) {
    try {
      const tokenContext = verifyRunContextToken(contextToken);

      if (tokenContext.partner_name.toLowerCase() !== brand.toLowerCase()) {
        throw new Error("Run context token does not match URL");
      }

      resolvedRedirectUrl =
        tokenContext.redirect_url?.trim() || resolvedRedirectUrl;
    } catch {
      redirect("/invalid-url");
    }
  }

  return (
    <div>
      <ModuleRunner
        config={config}
        imei={imei}
        redirectUrl={resolvedRedirectUrl}
      />
    </div>
  );
}
