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'
import crypto from 'crypto'

export async function GET() {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  const servers = mcpServerRepo.listByUser(user.id)
  return NextResponse.json(servers)
}

export async function POST(req: Request) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  const body = await req.json()
  const id = crypto.randomUUID()
  const name = body.name || 'New Server'
  const protocol = body.protocol || 'stdio'
  const configObj = body.config || {}
  const config = JSON.stringify(configObj)

  mcpServerRepo.create({ id, name, protocol, config, userId: user.id })

  // Auto-test connection after creation
  const status = await testMcpServer(protocol, configObj)
  mcpServerRepo.updateStatus(id, user.id, status)

  const server = mcpServerRepo.findByIdAndUser(id, user.id)
  return NextResponse.json(server, { status: 201 })
}
