/**
 * Get filter options from Metabase
 * Uses "Informe Ingresos - Opciones de Filtros" query (ID: 53)
 * Returns: ubicaciones, calidades, tipos, estados as arrays
 */
export default defineEventHandler(async () => {
  try {
    // Get all cards to find the opciones query
    const allCards = await getMetabaseCards('all')

    // Log available cards for debugging
    const informeCards = allCards.filter((c: any) => c.name.includes('Informe'))
    console.log('[API] Available Informe cards:', informeCards.map((c: any) => ({ id: c.id, name: c.name })))

    // Find "Informe Ingresos - Opciones de Filtros" query
    const card = allCards.find((c: any) => c.name === 'Informe Ingresos - Opciones de Filtros')

    if (!card) {
      console.warn('[API] Opciones de Filtros query not found, returning empty options')
      console.warn('[API] Searched for: "Informe Ingresos - Opciones de Filtros"')
      return {
        ubicaciones: [],
        calidades: [],
        tipos: [],
        estados: []
      }
    }

    console.log('[API] Found Opciones de Filtros card:', card.id, card.name)

    // Execute the query (no parameters needed)
    const result = await executeCardQuery(card.id, [])
    console.log('[API] Query result:', {
      hasData: !!result.data,
      rows: result.data?.rows?.length,
      cols: result.data?.cols?.length,
      firstRow: result.data?.rows?.[0]
    })

    if (!result.data?.rows?.[0] || !result.data?.cols) {
      return {
        ubicaciones: [],
        calidades: [],
        tipos: [],
        estados: []
      }
    }

    const row = result.data.rows[0]
    const cols = result.data.cols

    // Transform to object
    const data: any = {}
    cols.forEach((col: any, index: number) => {
      data[col.name] = row[index]
    })

    console.log('[API] Transformed data object:', data)
    console.log('[API] Column names:', cols.map((c: any) => c.name))

    // Parse arrays - some come as JSON strings, others as arrays
    const parseIfString = (value: any) => {
      if (typeof value === 'string') {
        return JSON.parse(value)
      }
      return value
    }

    return {
      ubicaciones: data.ubicaciones_disponibles ? parseIfString(data.ubicaciones_disponibles) : [],
      calidades: data.calidades_disponibles ? parseIfString(data.calidades_disponibles) : [],
      tipos: data.tipos_cafe ? parseIfString(data.tipos_cafe) : [],
      estados: data.estados_disponibles ? parseIfString(data.estados_disponibles) : []
    }
  } catch (error: any) {
    console.error('[API] Failed to fetch opciones de filtros from Metabase:', error)
    // Don't fail, just return empty options
    return {
      ubicaciones: [],
      calidades: [],
      tipos: [],
      estados: []
    }
  }
})
