import {
  authenticateMailboxDeveloperApiKey,
  getMailboxDeveloperMessageStatus,
} from "@/lib/mail-integrations";

function readBearerToken(request: Request) {
  const authorization = request.headers.get("authorization")?.trim() ?? "";
  const [scheme, token] = authorization.split(/\s+/, 2);

  if (scheme?.toLowerCase() !== "bearer" || !token) {
    return "";
  }

  return token.trim();
}

function apiError(status: number, code: string, message: string) {
  return Response.json(
    { error: { code, message }, ok: false },
    { headers: { "Cache-Control": "private, no-store" }, status },
  );
}

export async function GET(
  request: Request,
  context: { params: Promise<{ messageId: string }> },
) {
  const token = readBearerToken(request);

  if (!token) {
    return apiError(401, "missing_api_key", "Authorization 헤더에 Bearer API 키를 입력해주세요.");
  }

  let authenticated: Awaited<ReturnType<typeof authenticateMailboxDeveloperApiKey>>;

  try {
    authenticated = await authenticateMailboxDeveloperApiKey(token);
  } catch (error) {
    console.error("[developer-mail-api] status authentication failed", error);
    return apiError(503, "authentication_unavailable", "API 키를 확인하지 못했습니다. 잠시 후 다시 시도해주세요.");
  }

  if (!authenticated) {
    return apiError(401, "invalid_api_key", "API 키가 올바르지 않거나 폐기되었습니다.");
  }

  if (!authenticated.growthPlanAvailable) {
    return apiError(403, "growth_plan_required", "발송 API는 성장 플랜부터 이용할 수 있습니다.");
  }

  const { messageId: messageIdParam } = await context.params;
  const messageId = Number(messageIdParam);

  if (!Number.isSafeInteger(messageId) || messageId <= 0) {
    return apiError(400, "invalid_message_id", "messageId는 1 이상의 정수여야 합니다.");
  }

  try {
    const message = await getMailboxDeveloperMessageStatus(authenticated.mailboxEmail, messageId);

    if (!message) {
      return apiError(404, "message_not_found", "해당 발송 기록을 찾을 수 없습니다.");
    }

    return Response.json(
      { data: message, ok: true },
      { headers: { "Cache-Control": "private, no-store" } },
    );
  } catch (error) {
    console.error("[developer-mail-api] status lookup failed", error);
    return apiError(503, "status_unavailable", "발송 기록을 불러오지 못했습니다. 잠시 후 다시 시도해주세요.");
  }
}
