import { readFileSync } from 'fs'
import { resolve } from 'path'

export default defineEventHandler(async (event) => {
  const config = useRuntimeConfig()

  // Paramètre optionnel ?format=map pour retourner uniquement les champs carte
  const query = getQuery(event)

  try {
    // NocoDB V2 — table organisations, filtre approved + published
    const url = `${config.nocodbUrl}/api/v2/tables/${config.orgTableId}/records?where=(moderation_status,eq,approved)&limit=300&sort=-Id`

    const data: any = await $fetch(url, {
      headers: { 'xc-token': config.nocodbToken },
      timeout: 8000,
    })

    return { list: data?.list ?? [], source: 'nocodb' }
  } catch (err) {
    // Fallback seed JSON pour dev local si NocoDB inaccessible
    console.warn('[NAV API] NocoDB inaccessible, fallback seed JSON:', err)

    try {
      const seedPath = resolve(process.cwd(), 'V2-cadrage/seed-94-fiches-v2.json')
      const raw = readFileSync(seedPath, 'utf-8')
      const seed: any[] = JSON.parse(raw)

      // Normaliser le seed au format NocoDB (ajouter Id fictif)
      const list = seed.map((item: any, i: number) => ({
        Id: 1000 + i,
        nom: item.nom,
        url: item.url,
        description: item.description,
        echelle: item.echelle,
        tags_fonction: item.fonctions?.join(',') ?? '',
        territoire: item.territoire,
        localisation_ville: item.ville,
        latitude: item.lat,
        longitude: item.lon,
        moderation_status: 'approved',
        prioritaire: false,
      }))

      return { list, source: 'seed' }
    } catch (seedErr) {
      throw createError({ statusCode: 503, message: 'Service indisponible — NocoDB et seed inaccessibles' })
    }
  }
})
