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

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

  const isGlobal = user.role === 'admin_global'

  if (isGlobal) {
    const [[tenants]] = await pool.execute<any[]>('SELECT COUNT(*) as c FROM tenants WHERE status="active"') as any
    const [[users]] = await pool.execute<any[]>("SELECT COUNT(*) as c FROM portal_users WHERE status='active'") as any
    const [[adUsers]] = await pool.execute<any[]>('SELECT COUNT(*) as c FROM ad_users') as any
    const [[pendingTasks]] = await pool.execute<any[]>('SELECT COUNT(*) as c FROM agent_tasks WHERE status="pending"') as any
    const [[auditToday]] = await pool.execute<any[]>(
      'SELECT COUNT(*) as c FROM audit_logs WHERE DATE(created_at) = CURDATE()'
    ) as any

    const [recentTenants] = await pool.execute<any[]>(
      'SELECT * FROM tenants ORDER BY created_at DESC LIMIT 5'
    )
    const [recentAudit] = await pool.execute<any[]>(
      'SELECT a.*, t.name as tenant_name FROM audit_logs a LEFT JOIN tenants t ON t.id=a.tenant_id ORDER BY a.created_at DESC LIMIT 10'
    )

    return NextResponse.json({
      stats: {
        total_tenants: tenants.c,
        total_portal_users: users.c,
        total_ad_users: adUsers.c,
        pending_tasks: pendingTasks.c,
        audit_today: auditToday.c,
      },
      recent_tenants: recentTenants,
      recent_audit: recentAudit,
    })
  } else {
    const tenantId = user.tenant_id

    const [[adUsers]] = await pool.execute<any[]>(
      'SELECT COUNT(*) as c FROM ad_users WHERE tenant_id=?', [tenantId]
    ) as any
    const [[adEnabled]] = await pool.execute<any[]>(
      'SELECT COUNT(*) as c FROM ad_users WHERE tenant_id=? AND enabled=1', [tenantId]
    ) as any
    const [[groups]] = await pool.execute<any[]>(
      'SELECT COUNT(*) as c FROM ad_groups WHERE tenant_id=?', [tenantId]
    ) as any
    const [[pendingTasks]] = await pool.execute<any[]>(
      'SELECT COUNT(*) as c FROM agent_tasks WHERE tenant_id=? AND status="pending"', [tenantId]
    ) as any

    const [recentAudit] = await pool.execute<any[]>(
      'SELECT * FROM audit_logs WHERE tenant_id=? ORDER BY created_at DESC LIMIT 10',
      [tenantId]
    )
    const [lastSync] = await pool.execute<any[]>(
      'SELECT * FROM sync_history WHERE tenant_id=? ORDER BY started_at DESC LIMIT 1',
      [tenantId]
    )
    const [tenantInfo] = await pool.execute<any[]>(
      'SELECT name, agent_status, last_heartbeat FROM tenants WHERE id=?',
      [tenantId]
    )

    return NextResponse.json({
      stats: {
        total_ad_users: adUsers.c,
        enabled_ad_users: adEnabled.c,
        total_groups: groups.c,
        pending_tasks: pendingTasks.c,
      },
      recent_audit: recentAudit,
      last_sync: lastSync[0] ?? null,
      tenant: tenantInfo[0] ?? null,
    })
  }
}
