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 datos
// sensibles internamente.
//
// Las 9 RPCs v2 (rpc_dashboard_kpis, etc.) se retiraron de este mapa junto
// con sus widgets — referencian códigos de pregunta que no existen en v3
// (Etapa 4H, migración de códigos, queda pendiente aparte). Mirada Empresa
// usa las rpc_me_* nuevas, ya verificadas contra datos reales.
const RPC_MAP: Record<string, string> = {
  'me-prevalencia':       'rpc_me_prevalencia_cuidadores',
  'me-riesgo-rotacion':   'rpc_me_riesgo_rotacion',
  'me-ausentismo':        'rpc_me_ausentismo',
  'me-presentismo':       'rpc_me_presentismo',
  'me-punto-ciego':       'rpc_me_punto_ciego',
  'me-apoyos':            'rpc_me_apoyos_demandados',
  'me-talento-riesgo':    'rpc_me_talento_en_riesgo',
  'me-carrera-congelada': 'rpc_me_carrera_congelada',
  'me-intensidad-carga':  'rpc_me_intensidad_carga',
  'me-segmentacion':      'rpc_me_segmentacion',
  'me-disposicion-red':   'rpc_me_disposicion_red',
}

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 rpcParams: Record<string, unknown> = {
    p_survey_id: surveyId,
    p_filters: filtersToRpc(filters),
  }

  // Único caso con parámetro extra: el umbral parametrizable de la estrella.
  if (widget === 'me-talento-riesgo') {
    const umbral = sp.get('umbral')
    if (umbral) rpcParams.p_umbral_senales = parseInt(umbral, 10)
  }

  const { data, error } = await supabase.rpc(rpcName, rpcParams)

  if (error) {
    console.error(`[dashboard/${widget}] RPC error:`, error.message)
    return NextResponse.json({ error: error.message }, { status: 500 })
  }

  return NextResponse.json(data)
}
