import { NextResponse } from 'next/server'
import { mcpServerRepo } from '@/lib/database/repositories/mcp-server.repo'
import { testMcpServer } from '@/lib/mcp-test'
import { isAuthError, requireUser } from '@/lib/auth/session'

/**
 * POST /api/mcp/:id/test — Test MCP server connection.
 */
export async function POST(_req: Request, { params }: { params: Promise<{ id: string }> }) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  const { id } = await params

  const server = mcpServerRepo.findByIdAndUser(id, user.id)

  if (!server) {
    return NextResponse.json({ ok: false, error: 'Server not found' }, { status: 404 })
  }

  let config: Record<string, unknown> = {}
  try {
    config = JSON.parse(server.config)
  } catch {
    return NextResponse.json({ ok: false, error: 'Invalid server config' })
  }

  const status = await testMcpServer(server.protocol, config)
  mcpServerRepo.updateStatus(id, user.id, status)

  if (status === 'connected') {
    return NextResponse.json({ ok: true, message: 'Connected' })
  }
  return NextResponse.json({ ok: false, error: 'Connection test failed' })
}
