import { NextRequest, NextResponse } from 'next/server'
import pool from '@/lib/db'
import { getSessionFromRequest } from '@/lib/session'

export async function GET(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  const user = await getSessionFromRequest(req)
  if (!user) return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })

  const { id } = await params

  const [rows] = await pool.execute<any[]>('SELECT * FROM ad_groups WHERE id = ?', [id])
  if (!rows[0]) return NextResponse.json({ error: 'Não encontrado' }, { status: 404 })

  const [members] = await pool.execute<any[]>(
    `SELECT u.* FROM ad_users u
     INNER JOIN ad_group_members gm ON gm.user_id = u.id
     WHERE gm.group_id = ?`,
    [id]
  )

  return NextResponse.json({ ...rows[0], members })
}

export async function PUT(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  const user = await getSessionFromRequest(req)
  if (!user) return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })

  const { id } = await params
  const body = await req.json()
  const { name, description, scope, group_type, ou_path } = body

  await pool.execute(
    `UPDATE ad_groups SET name=?, description=?, scope=?, group_type=?, ou_path=?, sync_status='pending' WHERE id=?`,
    [name, description ?? null, scope, group_type, ou_path ?? null, id]
  )

  const [rows] = await pool.execute<any[]>('SELECT * FROM ad_groups WHERE id = ?', [id])
  return NextResponse.json(rows[0])
}

export async function DELETE(req: NextRequest, { params }: { params: Promise<{ id: string }> }) {
  const user = await getSessionFromRequest(req)
  if (!user) return NextResponse.json({ error: 'Não autorizado' }, { status: 401 })

  const { id } = await params
  const [groupRows] = await pool.execute<any[]>('SELECT tenant_id FROM ad_groups WHERE id = ?', [id])

  await pool.execute('DELETE FROM ad_group_members WHERE group_id = ?', [id])
  await pool.execute('DELETE FROM ad_groups WHERE id = ?', [id])

  if (groupRows[0]) {
    await pool.execute(
      `INSERT INTO agent_tasks (tenant_id, type, payload, status) VALUES (?, 'delete_group', ?, 'pending')`,
      [groupRows[0].tenant_id, JSON.stringify({ group_id: id })]
    )
  }

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