import { cookies } from "next/headers";
import { getSessionUser } from "@/lib/auth";
import {
  isMarketingInteractionEventType,
  MARKETING_VISITOR_COOKIE,
  recordMarketingInteractionEvent,
} from "@/lib/marketing-analytics";

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

type FunnelEventPayload = {
  eventDetail?: unknown;
  eventType?: unknown;
};

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

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

  const eventType =
    typeof payload?.eventType === "string" ? payload.eventType.trim() : "";
  if (!isMarketingInteractionEventType(eventType)) {
    return Response.json({ ok: false }, { status: 400 });
  }

  const [cookieStore, user] = await Promise.all([cookies(), getSessionUser()]);
  const visitorId =
    cookieStore.get(MARKETING_VISITOR_COOKIE)?.value?.trim() || null;
  if (!visitorId && !user?.email) {
    return Response.json({ ok: false }, { status: 400 });
  }

  const recorded = await recordMarketingInteractionEvent({
    eventDetail:
      typeof payload.eventDetail === "string" ? payload.eventDetail : null,
    eventType,
    ownerEmail: user?.email ?? null,
    visitorId,
  });

  return Response.json({ ok: recorded }, { status: recorded ? 200 : 503 });
}
