import { useState, useEffect } from 'react'
import api from '../services/api'

export type LookupMap = Record<string, string>

interface Lookups {
  categoriaMap: LookupMap
  centrosCustoMap: LookupMap
  locaisMap: LookupMap
  fornecedoresMap: LookupMap
  categorias: { id: string; nome: string }[]
  centrosCusto: { id: string; nome: string }[]
  locais: { id: string; nome: string }[]
  fornecedores: { id: string; nome: string }[]
  loading: boolean
}

function toMap(items: any[], nameField: string = 'nome'): LookupMap {
  const map: LookupMap = {}
  for (const item of items) {
    map[item.id] = item[nameField] || item.razao_social || item.nome_fantasia || item.id
  }
  return map
}

export function useLookups(): Lookups {
  const [categoriaMap, setCategoriaMap] = useState<LookupMap>({})
  const [centrosCustoMap, setCentrosCustoMap] = useState<LookupMap>({})
  const [locaisMap, setLocaisMap] = useState<LookupMap>({})
  const [fornecedoresMap, setFornecedoresMap] = useState<LookupMap>({})
  const [categorias, setCategorias] = useState<{ id: string; nome: string }[]>([])
  const [centrosCusto, setCentrosCusto] = useState<{ id: string; nome: string }[]>([])
  const [locais, setLocais] = useState<{ id: string; nome: string }[]>([])
  const [fornecedores, setFornecedores] = useState<{ id: string; nome: string }[]>([])
  const [loading, setLoading] = useState(true)

  useEffect(() => {
    Promise.all([
      api.get('/categorias').catch(() => ({ data: [] })),
      api.get('/centros-custo').catch(() => ({ data: [] })),
      api.get('/locais').catch(() => ({ data: [] })),
      api.get('/fornecedores').catch(() => ({ data: [] })),
    ]).then(([catRes, ccRes, locRes, fornRes]) => {
      const cats = catRes.data || []
      const ccs = ccRes.data || []
      const locs = locRes.data || []
      const forns = fornRes.data || []

      setCategorias(cats.map((c: any) => ({ id: c.id, nome: c.nome })))
      setCentrosCusto(ccs.map((c: any) => ({ id: c.id, nome: c.nome })))
      setLocais(locs.map((l: any) => ({ id: l.id, nome: l.nome })))
      setFornecedores(forns.map((f: any) => ({ id: f.id, nome: f.razao_social || f.nome_fantasia || f.nome })))

      setCategoriaMap(toMap(cats))
      setCentrosCustoMap(toMap(ccs))
      setLocaisMap(toMap(locs))
      setFornecedoresMap(toMap(forns, 'razao_social'))
    }).finally(() => setLoading(false))
  }, [])

  return { categoriaMap, centrosCustoMap, locaisMap, fornecedoresMap, categorias, centrosCusto, locais, fornecedores, loading }
}
