import { getSessionUser } from "@/lib/auth";
import { isKavenixAdminEmail } from "@/lib/kavenix-admin";
import {
  getKavenixMarketingProductFunnelDetail,
  normalizeKavenixMarketingRangeDays,
  normalizeMarketingProductFunnelDetail,
  normalizeMarketingProductFunnelEventType,
} from "@/lib/marketing-analytics";

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

const NO_STORE_HEADERS = {
  "Cache-Control": "no-store, max-age=0",
};

export async function GET(request: Request) {
  const user = await getSessionUser();

  if (!user) {
    return Response.json(
      { error: "unauthorized", message: "로그인이 필요합니다." },
      { status: 401, headers: NO_STORE_HEADERS },
    );
  }

  if (!isKavenixAdminEmail(user.email)) {
    return Response.json(
      { error: "forbidden", message: "최고관리자만 조회할 수 있습니다." },
      { status: 403, headers: NO_STORE_HEADERS },
    );
  }

  const searchParams = new URL(request.url).searchParams;
  const eventType = normalizeMarketingProductFunnelEventType(
    searchParams.get("eventType"),
  );
  const requestedDetail = searchParams.get("detail");
  const detail = requestedDetail
    ? normalizeMarketingProductFunnelDetail(requestedDetail)
    : null;

  if (!eventType || (requestedDetail && !detail)) {
    return Response.json(
      { error: "invalid-request", message: "조회할 퍼널 단계가 올바르지 않습니다." },
      { status: 400, headers: NO_STORE_HEADERS },
    );
  }

  try {
    const funnelDetail = await getKavenixMarketingProductFunnelDetail({
      detail,
      eventType,
      rangeDays: normalizeKavenixMarketingRangeDays(searchParams.get("range")),
    });

    return Response.json(
      { detail: funnelDetail, ok: true },
      { status: 200, headers: NO_STORE_HEADERS },
    );
  } catch (error) {
    console.error("Unable to load Kavenix marketing product funnel detail", error);
    return Response.json(
      { error: "funnel-detail-load-failed", message: "퍼널 상세 대상을 불러오지 못했습니다." },
      { status: 500, headers: NO_STORE_HEADERS },
    );
  }
}
