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

export interface MarketplaceContextValue {
  client: MarketplaceClient
}

const MarketplaceContext = createContext<MarketplaceContextValue | null>(null)

export function MarketplaceProvider({ client, children }: { client: MarketplaceClient; children: ReactNode }) {
  const value = useMemo<MarketplaceContextValue>(() => ({ client }), [client])
  return <MarketplaceContext.Provider value={value}>{children}</MarketplaceContext.Provider>
}

export function useMarketplaceContext(hook: string): MarketplaceContextValue {
  const ctx = useContext(MarketplaceContext)
  if (!ctx) throw new MarketplaceProviderError(hook)
  return ctx
}
