import { useState, useEffect, useCallback } from 'react' import { supabasePublic } from '../lib/supabase' function estaEnPeriodo(item, periodo) { if (!periodo?.desde || !periodo?.hasta) return true const ano = Number(item.ano) const mes = Number(item.mes) const desdeValor = periodo.desde.ano * 100 + periodo.desde.mes const hastaValor = periodo.hasta.ano * 100 + periodo.hasta.mes const actualValor = ano * 100 + mes return actualValor >= desdeValor && actualValor <= hastaValor } export function useData(year = null, periodo = { desde: null, hasta: null }) { const [siniestros, setSiniestros] = useState([]) const [involucrados, setInvolucrados] = useState([]) const [personas, setPersonas] = useState([]) const [loading, setLoading] = useState(true) const [error, setError] = useState(null) const periodoKey = JSON.stringify(periodo) const fetchData = useCallback(async () => { setLoading(true) setError(null) const periodoActual = JSON.parse(periodoKey) const periodoActivo = periodoActual.desde && periodoActual.hasta try { let qS = supabasePublic.from('siniestros').select('*') let qI = supabasePublic.from('Involucrados').select('*') let qP = supabasePublic.from('Personas').select('*') if (periodoActivo) { const anoDesde = periodoActual.desde.ano const anoHasta = periodoActual.hasta.ano qS = qS.gte('ano', anoDesde).lte('ano', anoHasta) qI = qI.gte('ano', anoDesde).lte('ano', anoHasta) qP = qP.gte('ano', anoDesde).lte('ano', anoHasta) } else if (year) { qS = qS.eq('ano', year) qI = qI.eq('ano', year) qP = qP.eq('ano', year) } const [resS, resI, resP] = await Promise.all([qS, qI, qP]) if (resS.error) throw resS.error if (resI.error) throw resI.error if (resP.error) throw resP.error let dataS = resS.data || [] let dataI = resI.data || [] let dataP = resP.data || [] if (periodoActivo) { dataS = dataS.filter(item => estaEnPeriodo(item, periodoActual)) dataI = dataI.filter(item => estaEnPeriodo(item, periodoActual)) dataP = dataP.filter(item => estaEnPeriodo(item, periodoActual)) } console.log('useData fetch', { year, periodo: periodoActual, siniestros: dataS.length, involucrados: dataI.length, personas: dataP.length, }) setSiniestros(dataS) setInvolucrados(dataI) setPersonas(dataP) } catch (err) { setError(err?.message || String(err)) console.error('useData error', err) } finally { setLoading(false) } }, [year, periodoKey]) useEffect(() => { fetchData() }, [fetchData]) return { siniestros, involucrados, personas, loading, error, refetch: fetchData } }