import { NextRequest, NextResponse } from 'next/server'
import { auth } from '@/auth'

export async function POST(request: NextRequest) {
  const session = await auth()
  if (!session?.user?.id || (session.user as any).role !== 'ADMIN') {
    return NextResponse.json({ success: false, message: 'Unauthorized' }, { status: 401 })
  }

  const { provider, searxngUrl, braveApiKey } = await request.json()

  try {
    if (provider === 'brave' || provider === 'both') {
      if (!braveApiKey) {
        if (provider === 'brave') {
          return NextResponse.json({ success: false, message: 'Clé API Brave manquante.' })
        }
      } else {
        const res = await fetch(
          'https://api.search.brave.com/res/v1/web/search?q=test&count=1',
          { headers: { 'Accept': 'application/json', 'X-Subscription-Token': braveApiKey } }
        )
        if (!res.ok) {
          return NextResponse.json({ success: false, message: `Brave Search — erreur ${res.status}: clé API invalide ou expirée.` })
        }
        if (provider === 'brave') {
          return NextResponse.json({ success: true, message: 'Brave Search fonctionne correctement.' })
        }
      }
    }

    // Test SearXNG
    const url = (searxngUrl || 'http://localhost:8080').replace(/\/+$/, '')
    const res = await fetch(`${url}/search?q=test&format=json`, {
      headers: { Accept: 'application/json' },
      signal: AbortSignal.timeout(5000),
    })

    if (!res.ok) {
      return NextResponse.json({ success: false, message: `SearXNG — erreur HTTP ${res.status}. Vérifiez l'URL et que le serveur est démarré.` })
    }

    const data = await res.json()
    const count = data.results?.length ?? 0

    return NextResponse.json({
      success: true,
      message: `SearXNG fonctionne correctement — ${count} résultat(s) retourné(s) pour la requête de test.`,
    })
  } catch (e: any) {
    const msg = e.name === 'TimeoutError'
      ? 'Timeout — SearXNG ne répond pas dans les 5 secondes. Vérifiez l\'URL et que le serveur est accessible.'
      : `Erreur de connexion : ${e.message}`
    return NextResponse.json({ success: false, message: msg })
  }
}
