import type { Order, OrderListFilter, Page } from '@platform-modules/commerce-orders'
import { useOrdersContext } from './OrdersProvider.js'
import { useAsyncResource } from './useAsyncResource.js'

export function useOrderList(
  filter: OrderListFilter,
  seed?: { initialData?: Page<Order> },
): { page: Page<Order> | null; loading: boolean; error: Error | null; reload: () => void } {
  const { client } = useOrdersContext('useOrderList')
  // Value-based over the WHOLE filter (JSON.stringify) — distinct values → distinct key →
  // correct refetch; identical values → identical key → no spurious fetch. NEVER key on the
  // object reference, NEVER a hand-listed subset (the subset-key staleness bug).
  const key = `list:${JSON.stringify(filter)}`
  const fetcher = () => client.listOrders(filter)
  const { data, loading, error, reload } = useAsyncResource<Page<Order>>(fetcher, key, seed)
  return { page: data, loading, error, reload }
}
