export class PromoValidationError extends Error {
  override readonly name = 'PromoValidationError'
  readonly code = 'PROMO_VALIDATION' as const

  constructor(readonly field: string) {
    super(`promo validation failed: ${field}`)
  }
}

export class PromoQuotaExhaustedError extends Error {
  override readonly name = 'PromoQuotaExhaustedError'
  readonly code = 'PROMO_QUOTA_EXHAUSTED' as const

  constructor(readonly reason: 'global' | 'per_user') {
    super(`promo quota exhausted: ${reason}`)
  }
}

export function isPromoValidationError(e: unknown): e is PromoValidationError {
  return (
    typeof e === 'object' &&
    e !== null &&
    (e as { name?: unknown }).name === 'PromoValidationError' &&
    (e as { code?: unknown }).code === 'PROMO_VALIDATION'
  )
}

export function isPromoQuotaExhaustedError(e: unknown): e is PromoQuotaExhaustedError {
  return (
    typeof e === 'object' &&
    e !== null &&
    (e as { name?: unknown }).name === 'PromoQuotaExhaustedError' &&
    (e as { code?: unknown }).code === 'PROMO_QUOTA_EXHAUSTED'
  )
}
