import { NextRequest, NextResponse } from 'next/server'
import { db } from '@/lib/db'
import { requireAuth } from '@/lib/api-auth'

export async function GET(request: NextRequest) {
  try {
    const authResult = await requireAuth(['SUPERVISOR'])(request)
    if ('error' in authResult) return authResult.error

    const { user } = authResult

    // Pending reviews assigned to this supervisor
    const pendingCount = await db.review.count({
      where: { assignedToId: user.id, status: 'PENDING', deletedAt: null },
    })

    // Acknowledged reviews assigned to this supervisor
    const acknowledgedCount = await db.review.count({
      where: { assignedToId: user.id, status: 'ACKNOWLEDGED', deletedAt: null },
    })

    // Resolved this month
    const now = new Date()
    const monthStart = new Date(now.getFullYear(), now.getMonth(), 1)
    const resolvedThisMonth = await db.review.count({
      where: {
        assignedToId: user.id,
        status: 'RESOLVED',
        deletedAt: null,
        resolvedAt: { gte: monthStart },
      },
    })

    // Average response time (hours) for resolved reviews
    const resolvedReviews = await db.review.findMany({
      where: {
        assignedToId: user.id,
        status: 'RESOLVED',
        deletedAt: null,
        resolvedAt: { not: null },
      },
      select: {
        createdAt: true,
        resolvedAt: true,
      },
    })

    let avgResponseTimeHours = 0
    if (resolvedReviews.length > 0) {
      const totalHours = resolvedReviews.reduce((acc, review) => {
        if (review.resolvedAt && review.createdAt) {
          const diffMs = review.resolvedAt.getTime() - review.createdAt.getTime()
          return acc + (diffMs / (1000 * 60 * 60))
        }
        return acc
      }, 0)
      avgResponseTimeHours = Math.round((totalHours / resolvedReviews.length) * 10) / 10
    }

    // Assigned reviews (all statuses)
    const assignedReviews = await db.review.findMany({
      where: { assignedToId: user.id, deletedAt: null },
      include: {
        customer: { select: { id: true, name: true, email: true } },
        _count: { select: { photos: true, responses: true } },
      },
      orderBy: { createdAt: 'desc' },
      take: 50,
    })

    return NextResponse.json({
      pendingCount,
      acknowledgedCount,
      resolvedThisMonth,
      avgResponseTimeHours,
      assignedReviews,
    })
  } catch (error) {
    console.error('Error en dashboard de supervisor:', error)
    return NextResponse.json(
      { error: 'Error interno del servidor' },
      { status: 500 }
    )
  }
}
