import { NextRequest, NextResponse } from 'next/server' import { createClient } from '@supabase/supabase-js' import { queryToFilters, filtersToRpc } from '@/lib/dashboard-utils' // Route Handler server-side: llama a las RPC con el cliente Supabase. // El service_role nunca llega al browser — vive solo en este servidor. // Las RPC son SECURITY DEFINER → aplican k-anonimato y excluyen 3.4/7.1 internamente. const RPC_MAP: Record = { kpis: 'rpc_dashboard_kpis', prevalencia: 'rpc_prevalencia_por_depto', heatmap: 'rpc_heatmap_intensidad', distribucion: 'rpc_perfil_poblacion', apoyos: 'rpc_apoyos_demandados', score: 'rpc_score_organizacional', piramide: 'rpc_piramide_demografica', intensidad: 'rpc_intensidad_vs_bienestar', saturacion: 'rpc_saturacion_cuidador', } function getSupabaseServer() { const url = process.env.NEXT_PUBLIC_SUPABASE_URL! // Usar anon key — las RPC son SECURITY DEFINER y aplican sus propias reglas const key = process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY! return createClient(url, key) } export async function GET( request: NextRequest, { params }: { params: Promise<{ widget: string }> } ) { const { widget } = await params const rpcName = RPC_MAP[widget] if (!rpcName) { return NextResponse.json({ error: 'Widget desconocido' }, { status: 404 }) } const sp = request.nextUrl.searchParams const surveyId = sp.get('survey_id') if (!surveyId) { return NextResponse.json({ error: 'survey_id requerido' }, { status: 400 }) } const filters = queryToFilters(sp) const supabase = getSupabaseServer() const { data, error } = await supabase.rpc(rpcName, { p_survey_id: surveyId, p_filters: filtersToRpc(filters), }) if (error) { console.error(`[dashboard/${widget}] RPC error:`, error.message) return NextResponse.json({ error: error.message }, { status: 500 }) } return NextResponse.json(data) }