import { recordMarketingLandingView } from "@/lib/marketing-analytics";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

type MarketingTrackPayload = {
  landingPath?: unknown;
  referrerHost?: unknown;
  referrerPath?: unknown;
  screenHeight?: unknown;
  screenWidth?: unknown;
  timezone?: unknown;
  utmCampaign?: unknown;
  utmContent?: unknown;
  utmMedium?: unknown;
  utmSource?: unknown;
  utmTerm?: unknown;
  visitorId?: unknown;
  viewportHeight?: unknown;
  viewportWidth?: unknown;
};

function getClientIp(request: Request) {
  const forwarded = request.headers.get("x-forwarded-for")?.split(",")[0]?.trim();
  return forwarded || request.headers.get("cf-connecting-ip") || request.headers.get("x-real-ip");
}

function getCountryCode(request: Request) {
  return (
    request.headers.get("cf-ipcountry") ||
    request.headers.get("x-vercel-ip-country") ||
    request.headers.get("x-country-code")
  );
}

export async function POST(request: Request) {
  let payload: MarketingTrackPayload;

  try {
    payload = (await request.json()) as MarketingTrackPayload;
  } catch {
    return Response.json({ ok: false }, { status: 400 });
  }

  await recordMarketingLandingView({
    acceptLanguage: request.headers.get("accept-language"),
    clientIp: getClientIp(request),
    countryCode: getCountryCode(request),
    landingPath: String(payload.landingPath ?? ""),
    referrerHost: String(payload.referrerHost ?? ""),
    referrerPath: String(payload.referrerPath ?? ""),
    screenHeight: Number(payload.screenHeight ?? 0),
    screenWidth: Number(payload.screenWidth ?? 0),
    timezone: String(payload.timezone ?? ""),
    utmCampaign: String(payload.utmCampaign ?? ""),
    utmContent: String(payload.utmContent ?? ""),
    utmMedium: String(payload.utmMedium ?? ""),
    utmSource: String(payload.utmSource ?? ""),
    utmTerm: String(payload.utmTerm ?? ""),
    userAgent: request.headers.get("user-agent"),
    visitorId: String(payload.visitorId ?? ""),
    viewportHeight: Number(payload.viewportHeight ?? 0),
    viewportWidth: Number(payload.viewportWidth ?? 0),
  });

  return Response.json({ ok: true });
}
