export class Context {
  /**
   * APIの操作ユーザーを追跡するためのID
   */
  trackingId: string;
  /**
   * APIの操作ユーザーのIPアドレス
   */
  ip: string;
  /**
   * ユーザーの操作を一意に識別するためのID
   */
  requestId: string;
  /**
   * APIの代行操作ユーザーを追跡するためのID
   */
  delegationId?: string | undefined;

  constructor(externalId: string, requestId: string, delegationId?: string) {
    this.trackingId = externalId;
    this.delegationId = delegationId;
    this.requestId = requestId;
  }
  /**
   * ログにユーザーを特定する情報を出力する
   */
  getTrackingId(): string {
    if (this.delegationId) {
      return `${this.requestId}_${this.trackingId} by ${this.delegationId}`;
    } else {
      return `${this.requestId}_${this.trackingId}`;
    }
  }
}
