import { Request } from 'express';
import { Context } from './types';

export const makeContext = (
  externalId: string,
  requestId: string,
  delegationId?: string,
): Context => {
  return new Context(externalId, requestId, delegationId);
};

// リクエストヘッダーからrequestIdを取得する
export const retrieveRequestId = (req: Request): string | undefined => {
  return req.header('x-request-id');
};

/**
 * リクエストのIPアドレスを取得します
 * @param {Request}
 * @return {string | undefined}
 */
export const retrieveIp = (req: Request): string | undefined => {
  // ローカル環境では直近の送信元IPを取得する
  if (process.env.STAGE === 'local') {
    return req.ip;
  }
  const ip = req.header('x-forwarded-for');
  if (typeof ip === 'string') {
    return ip;
  }
  return undefined;
};
