// El cliente NUNCA consulta Supabase directamente.
// Toda la comunicación va a través de los Route Handlers /api/dashboard/[widget].

import type { DashboardFilters } from './dashboard-types'
import { filtersToQuery } from './dashboard-utils'

async function fetchWidget<T>(
  widget: string,
  surveyId: string,
  filters: DashboardFilters,
  extra?: Record<string, string>
): Promise<T> {
  const qs = filtersToQuery(surveyId, filters)
  const extraQs = extra ? `&${new URLSearchParams(extra).toString()}` : ''
  const res = await fetch(`/api/dashboard/${widget}?${qs}${extraQs}`, { cache: 'no-store' })
  if (!res.ok) throw new Error(`Widget ${widget}: ${res.status}`)
  return res.json()
}

// Mirada Empresa — una entrada por métrica (E1-E10 + estrella).
export const queries = {
  mePrevalencia: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-prevalencia', sid, f),
  meRiesgoRotacion: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-riesgo-rotacion', sid, f),
  meAusentismo: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-ausentismo', sid, f),
  mePresentismo: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-presentismo', sid, f),
  mePuntoCiego: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-punto-ciego', sid, f),
  meApoyos: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-apoyos', sid, f),
  // p_umbral_senales es parametrizable en la RPC — el widget puede pasarlo,
  // si no se pasa nada la RPC usa su propio default (2 de 3).
  meTalentoRiesgo: (sid: string, f: DashboardFilters, umbral?: number) =>
    fetchWidget('me-talento-riesgo', sid, f, umbral !== undefined ? { umbral: String(umbral) } : undefined),
  meCarreraCongelada: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-carrera-congelada', sid, f),
  meIntensidadCarga: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-intensidad-carga', sid, f),
  meSegmentacion: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-segmentacion', sid, f),
  meDisposicionRed: (sid: string, f: DashboardFilters) =>
    fetchWidget('me-disposicion-red', sid, f),
}
