import type { CommonDomainErrorKind, DomainError } from '@core/shared/errors/DomainError';

export abstract class RacingDomainError extends Error implements DomainError<CommonDomainErrorKind> {
  readonly type = 'domain' as const;
  readonly context = 'racing-domain';
  abstract readonly kind: CommonDomainErrorKind;

  constructor(message: string) {
    super(message);
    Object.setPrototypeOf(this, new.target.prototype);
  }
}

export class RacingDomainValidationError
  extends RacingDomainError
  implements DomainError<'validation'>
{
  readonly kind = 'validation' as const;

  constructor(message: string) {
    super(message);
  }
}

export class RacingDomainInvariantError
  extends RacingDomainError
  implements DomainError<'invariant'>
{
  readonly kind = 'invariant' as const;

  constructor(message: string) {
    super(message);
  }
}