export class CartValidationError extends Error {
  override readonly name = 'CartValidationError'
  readonly code = 'CART_VALIDATION' as const

  constructor(
    readonly field: string,
    readonly detail?: string,
  ) {
    super(detail ? `cart validation failed: ${field} — ${detail}` : `cart validation failed: ${field}`)
  }
}

export class MixedCurrencyError extends Error {
  override readonly name = 'MixedCurrencyError'
  readonly code = 'MIXED_CURRENCY' as const

  constructor(
    readonly expected: string,
    readonly got: string,
  ) {
    super(`mixed currency: expected ${expected}, got ${got}`)
  }
}

export function isCartValidationError(e: unknown): e is CartValidationError {
  return (
    typeof e === 'object' &&
    e !== null &&
    (e as { name?: unknown }).name === 'CartValidationError' &&
    (e as { code?: unknown }).code === 'CART_VALIDATION'
  )
}

export function isMixedCurrencyError(e: unknown): e is MixedCurrencyError {
  return (
    typeof e === 'object' &&
    e !== null &&
    (e as { name?: unknown }).name === 'MixedCurrencyError' &&
    (e as { code?: unknown }).code === 'MIXED_CURRENCY'
  )
}
