/**
 * 相関IDの発行（`proxy.ts` から★最初に★呼ぶ）。
 *
 * ★認証より先に走らせること★（`docs/logging-design.md` §9 の申し送り）。
 * IP拒否・認証失敗で弾いたリクエストのログにも相関IDが付くようにするため。
 * 順序を逆にすると、いちばん追跡したい「弾かれたリクエスト」だけ ID が欠ける。
 *
 * ★`proxy.ts` は別バンドルになりうるので、重いモジュールを import しないこと★。
 * ここが読むのは `lib/logger/context.ts`（`node:async_hooks` だけに依存する軽い
 * モジュール）のヘッダ名定数のみで、pino には触れない。
 */
import { REQUEST_ID_HEADER } from "@/lib/logger/context";

export { REQUEST_ID_HEADER };

/**
 * 相関IDを発行して後段へ渡すリクエストヘッダを組み立てる。
 *
 * ★クライアントが送ってきた `x-request-id` は信頼せず、常に上書き生成する★
 *   （`docs/logging-design.md` §7）。外から与えられた ID を通すと、
 *   別リクエストのログに同じ ID を混ぜ込まれて相関が壊せる。
 *
 * `lib/logger/context.ts` の `withRequestId()` は「ヘッダがあればそれを使う」作りだが、
 * ここで必ず上書きするので、ルート側は常に proxy が発行した ID を受け取る。
 * ★`withRequestId()` は変更不要★（そのまま動く）。
 */
export function issueRequestHeaders(source: Headers): {
  requestId: string;
  headers: Headers;
} {
  const requestId = crypto.randomUUID();
  const headers = new Headers(source);
  headers.set(REQUEST_ID_HEADER, requestId);
  return { requestId, headers };
}
