import { NextResponse } from 'next/server'
import { agentRepo } from '@/lib/database/repositories/agent.repo'
import { agentSkillRepo } from '@/lib/database/repositories/agent-skill.repo'
import { skillRepo } from '@/lib/database/repositories/skill.repo'
import { isAuthError, requireUser } from '@/lib/auth/session'

// GET /api/agents/:id/skills — list bound skill IDs
export async function GET(_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 agent = agentRepo.findByIdAndUser(id, user.id)
  if (!agent) return NextResponse.json({ error: 'Not found' }, { status: 404 })
  const skillIds = agentSkillRepo.listSkillIdsByAgent(id)
  return NextResponse.json(skillIds)
}

// PUT /api/agents/:id/skills — replace all bound skills
export async function PUT(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 body = await req.json()
  const skillIds: string[] = Array.isArray(body.skill_ids) ? body.skill_ids : []

  const agent = agentRepo.findByIdAndUser(id, user.id)
  if (!agent) return NextResponse.json({ error: 'Not found' }, { status: 404 })
  const ownedIds = skillRepo.findOwnedIds(user.id, skillIds)
  if (ownedIds.length !== skillIds.length) {
    return NextResponse.json({ error: 'Invalid skill_ids' }, { status: 400 })
  }

  agentSkillRepo.replaceByAgent(id, skillIds)

  return NextResponse.json({ ok: true })
}
