export class StepId {
  private readonly _value: number;

  private constructor(value: number) {
    this._value = value;
  }

  static create(value: number): StepId {
    if (!Number.isInteger(value)) {
      throw new Error('StepId must be an integer');
    }
    if (value < 1 || value > 18) {
      throw new Error('StepId must be between 1 and 18');
    }
    return new StepId(value);
  }

  get value(): number {
    return this._value;
  }

  equals(other: StepId): boolean {
    return this._value === other._value;
  }

  isModalStep(): boolean {
    return this._value === 6 || this._value === 9 || this._value === 12;
  }

  isFinalStep(): boolean {
    return this._value === 18;
  }

  next(): StepId {
    if (this.isFinalStep()) {
      throw new Error('Cannot advance beyond final step');
    }
    return StepId.create(this._value + 1);
  }
}