// Filtros globales del dashboard (sidebar)
export interface DashboardFilters {
  depto?: string
  genero?: string[]
  etario?: string[]
  modalidad?: string[]
}

// Estado de cada widget
export type WidgetStatus = 'loading' | 'ok' | 'suppressed' | 'error'

// Payloads de cada RPC
export interface KpiData {
  status: 'ok'
  n: number
  pct_cuidadores: number
  score_bienestar: number | null  // avg raw 4.3 (1.0–5.0)
  pct_ausencias: number
}

export interface DeptoData {
  depto: string
  n: number | null
  pct_cuidadores: number | null
  suppressed: boolean
}
export interface PrevalenciaData { status: 'ok'; n_total: number; data: DeptoData[] }

export interface HeatmapCell { horas: string; ausencias: string; n: number | null; suppressed: boolean }
export interface HeatmapData { status: 'ok'; n_total: number; data: HeatmapCell[] }

export interface DistribucionData {
  status: 'ok'; n: number
  disc_propia: number; familiar: number; adulto_mayor: number; ninguno: number
}

export interface ApoyoItem { politica: string; n: number; pct: number }
export interface ApoyosData { status: 'ok'; n_total: number; data: ApoyoItem[] }

export interface ScoreData { status: 'ok'; n: number; score: number; zona: 'baja' | 'desarrollo' | 'consciente' }

export interface PiramideCell { etario: string; genero: string; n: number | null; suppressed: boolean }
export interface PiramideData { status: 'ok'; n_total: number; data: PiramideCell[] }

export interface IntensidadCell { horas: string; bienestar: string; n: number | null; suppressed: boolean }
export interface IntensidadData { status: 'ok'; n_total: number; data: IntensidadCell[] }

export interface SaturacionSegmento {
  segmento: string
  n: number | null
  pct: number | null
  apoyo: string | null
  suppressed: boolean
}
export interface SaturacionData { status: 'ok'; n_total: number; segmentos: SaturacionSegmento[] }

export type SuppressedPayload = { status: 'suppressed'; min_n: number; n: number }

export type RpcResult<T> = T | SuppressedPayload

export function isSuppressed(r: unknown): r is SuppressedPayload {
  return typeof r === 'object' && r !== null && (r as Record<string, unknown>)['status'] === 'suppressed'
}
