import { describe, expect, it } from 'vitest'
import {
  OrderWireError,
  OrdersProviderError,
  isOrderWireError,
  isOrdersProviderError,
  isOrderNotFoundError,
  isOrderValidationError,
} from './errors.js'
import { OrderNotFoundError } from '@platform-modules/commerce-orders'

describe('errors + structural guards (no instanceof)', () => {
  it('isOrdersProviderError matches by name, not instanceof', () => {
    const e = new OrdersProviderError('useOrder')
    expect(isOrdersProviderError(e)).toBe(true)
    expect(e.message).toContain('useOrder')
    // structural: a plain object with the same name tag passes (cross-package dedup safety)
    expect(isOrdersProviderError({ name: 'OrdersProviderError' })).toBe(true)
    expect(isOrdersProviderError(new Error('x'))).toBe(false)
    expect(isOrdersProviderError(null)).toBe(false)
  })

  it('isOrderWireError matches by name', () => {
    const e = new OrderWireError('bad amount')
    expect(isOrderWireError(e)).toBe(true)
    expect(isOrderWireError({ name: 'OrderWireError' })).toBe(true)
    expect(isOrderWireError(new Error('x'))).toBe(false)
  })

  it('re-exports core guards', () => {
    expect(isOrderNotFoundError(new OrderNotFoundError('id'))).toBe(true)
    expect(typeof isOrderValidationError).toBe('function')
  })
})
