import { DomainError } from '../errors/domain.error';

export class ShareId {
  private readonly _value: bigint;

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

  static create(value: bigint | string | number): ShareId {
    const bigIntValue = typeof value === 'bigint' ? value : BigInt(value);
    if (bigIntValue <= 0n) {
      throw new DomainError('ShareId must be a positive number');
    }
    return new ShareId(bigIntValue);
  }

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

  toString(): string {
    return this._value.toString();
  }

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