import { Backoff } from "./backoff";

/**
 * ConstantBackoff always returns the same backoff-time.
 */
export class ConstantBackoff implements Backoff {
  private readonly backoff: number;
  private _retries: number = 0;

  /**
   * Creates a new ConstantBackoff.
   * @param backoff the backoff-time to return
   */
  constructor(backoff: number) {
    if (!Number.isInteger(backoff) || backoff < 0) {
      throw new Error("Backoff must be a positive integer");
    }

    this.backoff = backoff;
  }

  get retries(): number {
    return this._retries;
  }

  get current(): number {
    return this.backoff;
  }

  next(): number {
    this._retries++;
    return this.backoff;
  }

  reset(): void {
    this._retries = 0;
  }
}
