import {
  isImmutableFieldError,
  isNotPurchasedError,
  isReviewNotFoundError,
  isReviewValidationError,
} from '@platform-modules/commerce-reviews'

/** Thrown when a reviews hook is used outside <ReviewsProvider> (§2). */
export class ReviewsProviderError extends Error {
  override readonly name = 'ReviewsProviderError'
  constructor(hook: string) {
    super(`${hook} must be used within <ReviewsProvider>`)
  }
}
export function isReviewsProviderError(e: unknown): e is ReviewsProviderError {
  return typeof e === 'object' && e !== null && (e as { name?: string }).name === 'ReviewsProviderError'
}

/** Thrown by reviveReview on malformed serialized wire input (§5). */
export class ReviewWireError extends Error {
  override readonly name = 'ReviewWireError'
  constructor(message: string) {
    super(message)
  }
}
export function isReviewWireError(e: unknown): e is ReviewWireError {
  return typeof e === 'object' && e !== null && (e as { name?: string }).name === 'ReviewWireError'
}

// Re-export the core's structural guards so consumers branch on error kind without instanceof (§1).
export { isImmutableFieldError, isNotPurchasedError, isReviewNotFoundError, isReviewValidationError }