import { NextRequest, NextResponse } from 'next/server'
import { webhookTokenRepo } from '@/lib/database/repositories/webhook-token.repo'
import { isAuthError, requireUser } from '@/lib/auth/session'

export async function DELETE(_req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  let user
  try { user = await requireUser() } catch (err) { if (isAuthError(err)) return err; throw err }
  const { id } = await params

  webhookTokenRepo.deleteByIdAndOwner(id, user.id)
  return NextResponse.json({ ok: true })
}

export async function PATCH(req: NextRequest, { 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 existing = webhookTokenRepo.findByIdAndOwner(id, user.id)
  if (!existing) return NextResponse.json({ error: 'Not found' }, { status: 404 })

  const body = await req.json()
  const fields: { name?: string; enabled?: boolean } = {}
  let hasUpdate = false

  if (body.name !== undefined) {
    fields.name = body.name
    hasUpdate = true
  }
  if (body.enabled !== undefined) {
    fields.enabled = body.enabled ? true : false
    hasUpdate = true
  }

  if (!hasUpdate) return NextResponse.json({ error: 'No fields to update' }, { status: 400 })

  webhookTokenRepo.updateFields(id, user.id, fields)

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