import { NextRequest, NextResponse } from 'next/server'
import { db } from '@/lib/db'
import { notifyUsers } from '@/lib/notifications'

export async function GET(request: NextRequest) {
  // Validar que la llamada viene del proceso autorizado
  const authHeader = request.headers.get('authorization')
  if (authHeader !== `Bearer ${process.env.CRON_SECRET}`) {
    return NextResponse.json({ error: 'No autorizado' }, { status: 401 })
  }

  try {
    const twentyFourHoursAgo = new Date(Date.now() - 24 * 60 * 60 * 1000)

    // Buscar reseñas negativas PENDING sin respuesta por más de 24 horas
    const overdueReviews = await db.review.findMany({
      where: {
        status: 'PENDING',
        sentiment: 'NEGATIVE',
        deletedAt: null,
        createdAt: { lte: twentyFourHoursAgo },
      },
      include: {
        customer: { select: { id: true, name: true } },
        assignedTo: { select: { id: true, name: true } },
      },
    })

    if (overdueReviews.length === 0) {
      return NextResponse.json({ escalated: 0 })
    }

    // Obtener todos los managers activos
    const managers = await db.user.findMany({
      where: { role: 'MANAGER', isActive: true },
      select: { id: true },
    })

    let escalatedCount = 0

    for (const review of overdueReviews) {
      // Notificar a todos los managers
      if (managers.length > 0) {
        await notifyUsers({
          userIds: managers.map(m => m.id),
          title: '🔴 Reseña sin atender — Escalamiento',
          message: `La reseña ${review.reviewCode} del cliente ${review.customer.name} lleva más de 24 horas sin respuesta del supervisor${review.assignedTo ? ` (asignado: ${review.assignedTo.name})` : ''}.`,
          type: 'ESCALATION',
          reviewId: review.id,
        })
      }

      escalatedCount++
    }

    return NextResponse.json({
      escalated: escalatedCount,
      reviewCodes: overdueReviews.map(r => r.reviewCode),
    })
  } catch (error) {
    console.error('Error en cron de escalamiento:', error)
    return NextResponse.json({ error: 'Error interno del servidor' }, { status: 500 })
  }
}
