import { renderHook } from '@testing-library/react'
import { describe, expect, it, vi } from 'vitest'
import { isPaymentProviderError } from '@platform-modules/billing-react'
import { CheckoutProvider } from './CheckoutProvider.js'
import { useCheckoutConfirm } from './useCheckoutConfirm.js'
import { isCheckoutProviderError } from './errors.js'
import type { CheckoutClient } from './client.js'

const noopClient: CheckoutClient = {
  start: vi.fn(),
  getStatus: vi.fn(),
}

describe('useCheckoutConfirm payment-provider scope (§6)', () => {
  it('inside CheckoutProvider but outside PaymentUiContext throws PaymentProviderError', () => {
    const wrapper = ({ children }: { children: React.ReactNode }) => (
      <CheckoutProvider client={noopClient} cartId="c1">
        {children}
      </CheckoutProvider>
    )

    try {
      renderHook(() => useCheckoutConfirm(), { wrapper })
      throw new Error('should have thrown')
    } catch (e) {
      expect(isCheckoutProviderError(e)).toBe(false)
      expect(isPaymentProviderError(e)).toBe(true)
      expect((e as Error).message).toMatch(/payment provider/i)
    }
  })
})