import { useQuery } from '@tanstack/react-query'
import { api } from '@/lib/api'
import type {
  PagedResult, UnitOfMeasure, ProductGroup, Counterparty,
  Country, Currency, Store, PriceType,
} from '@/lib/types'

function useLookup<T>(key: string, url: string) {
  return useQuery({
    queryKey: [`lookup:${key}`],
    queryFn: async () => (await api.get<PagedResult<T>>(`${url}?pageSize=100`)).data.items,
    // staleTime=0 + refetchOnMount: 'always' гарантируют что любая страница
    // (например ProductEditPage), монтирующая usePriceTypes / useUnits / etc,
    // сразу подтянет свежий снапшот справочника после правки в его UI —
    // без необходимости явно прокидывать invalidate-pair (lookup-ключ ↔
    // URL-ключ useCatalogMutations).
    staleTime: 0,
    refetchOnMount: 'always',
    refetchOnWindowFocus: true,
  })
}

export const useUnits = () => useLookup<UnitOfMeasure>('units', '/api/catalog/units-of-measure')
export const useProductGroups = () => useLookup<ProductGroup>('groups', '/api/catalog/product-groups')
export const useCountries = () => useLookup<Country>('countries', '/api/catalog/countries')
export const useCurrencies = () => useLookup<Currency>('currencies', '/api/catalog/currencies')
export const useStores = () => useLookup<Store>('stores', '/api/catalog/stores')
export const usePriceTypes = () => useLookup<PriceType>('price-types', '/api/catalog/price-types')
// MoySklad-style: контрагент один, может быть и поставщиком, и покупателем
// в разных документах. Не фильтруем по Kind — пользователь сам выбирает.
export const useCounterparties = () => useLookup<Counterparty>('counterparties', '/api/catalog/counterparties')
// Алиас для обратной совместимости со старым кодом форм Supply/RetailSale.
export const useSuppliers = useCounterparties
