import { createContext, useContext, useMemo, type ReactNode } from 'react'
import type { OrdersClient } from './client.js'
import { OrdersProviderError } from './errors.js'

export interface OrdersContextValue {
  client: OrdersClient
}

const OrdersContext = createContext<OrdersContextValue | null>(null)

/** Pure client-injection context (§5) — no shared mount-state, no mount fetch. */
export function OrdersProvider({ client, children }: { client: OrdersClient; children: ReactNode }) {
  const value = useMemo<OrdersContextValue>(() => ({ client }), [client])
  return <OrdersContext.Provider value={value}>{children}</OrdersContext.Provider>
}

export function useOrdersContext(hook: string): OrdersContextValue {
  const ctx = useContext(OrdersContext)
  if (!ctx) throw new OrdersProviderError(hook)
  return ctx
}
