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

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 skill = skillRepo.findByIdAndUser(id, user.id)
  if (!skill) return NextResponse.json({ error: 'Not found' }, { status: 404 })
  return NextResponse.json(skill)
}

export async function PATCH(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 hasUpdate =
    body.name !== undefined ||
    body.description !== undefined ||
    body.scope !== undefined ||
    body.enabled !== undefined ||
    body.content !== undefined
  if (!hasUpdate) {
    return NextResponse.json({ error: 'No fields to update' }, { status: 400 })
  }

  const skill = skillRepo.updateFields(id, user.id, {
    ...(body.name !== undefined && { name: body.name }),
    ...(body.description !== undefined && { description: body.description }),
    ...(body.scope !== undefined && { scope: body.scope }),
    ...(body.enabled !== undefined && { enabled: body.enabled ? 1 : 0 }),
    ...(body.content !== undefined && { content: body.content }),
  })

  if (!skill) return NextResponse.json({ error: 'Not found' }, { status: 404 })
  return NextResponse.json(skill)
}

export async function DELETE(_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
  skillRepo.deleteById(id, user.id)
  return NextResponse.json({ ok: true })
}
