import { NextResponse } from 'next/server'
import { requireAdmin, getSession } from '@/lib/auth'
import { createAuditLog } from '@/lib/audit'
import { updateWidget, deleteWidget } from '@/lib/services/panel-builder-service'

export async function PUT(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const adminCheck = await requireAdmin()
    if (adminCheck) return adminCheck

    const session = await getSession()
    const { id } = await params
    const data = await request.json()

    const widget = await updateWidget(id, {
      type: data.type,
      title: data.title,
      config: data.config,
      dataSource: data.dataSource,
      position: data.position,
      size: data.size,
      sortOrder: data.sortOrder,
    })

    await createAuditLog({
      userId: session?.userId,
      action: 'WIDGET_UPDATED',
      category: 'PANEL_BUILDER',
      details: { widgetId: widget.id, type: widget.type },
      ipAddress: request.headers.get('x-forwarded-for') || undefined,
    })

    return NextResponse.json(widget)
  } catch (error) {
    console.error('[API] Failed to update widget:', error)
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
  }
}

export async function DELETE(
  request: Request,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const adminCheck = await requireAdmin()
    if (adminCheck) return adminCheck

    const session = await getSession()
    const { id } = await params

    await deleteWidget(id)

    await createAuditLog({
      userId: session?.userId,
      action: 'WIDGET_DELETED',
      category: 'PANEL_BUILDER',
      details: { widgetId: id },
      ipAddress: request.headers.get('x-forwarded-for') || undefined,
    })

    return NextResponse.json({ success: true })
  } catch (error) {
    console.error('[API] Failed to delete widget:', error)
    return NextResponse.json({ error: 'Internal server error' }, { status: 500 })
  }
}
