import { NextRequest, NextResponse } from "next/server";
import { getServerSession } from "next-auth";
import { authOptions } from "@/app/api/auth/authOptions";
import { prisma } from "@/lib/prisma";

export async function GET(
  req: NextRequest,
  { params }: { params: Promise<{ id: string }> }
) {
  try {
    const session = await getServerSession(authOptions);
    if (!session?.user || session.user.role !== "ADMIN") {
      return NextResponse.json({ error: "Accès refusé" }, { status: 403 });
    }

    const resolvedParams = await params;
    const managerId = parseInt(resolvedParams.id);
    if (isNaN(managerId)) {
      return NextResponse.json({ error: "ID invalide" }, { status: 400 });
    }

    // Vérifier que le manager existe
    const manager = await prisma.user.findUnique({
      where: { id: managerId, role: "MANAGER" }
    });

    if (!manager) {
      return NextResponse.json({ error: "Manager non trouvé" }, { status: 404 });
    }

    // Compter les clients
    const clientsCount = await prisma.client.count({
      where: { managerId }
    });

    // Récupérer le ManagerData du manager
    const managerData = await prisma.managerData.findUnique({
      where: { userId: managerId }
    });

    // Compter les tâches par statut
    const tasksStats = await prisma.task.groupBy({
      by: ['status'],
      where: { managerDataId: managerData?.id },
      _count: true
    });

    const tasksInProgress = tasksStats.find(s => s.status === 'IN_PROGRESS')?._count || 0;
    const tasksCompleted = tasksStats.find(s => s.status === 'COMPLETED')?._count || 0;
    const tasksOverdue = tasksStats.find(s => s.status === 'OVERDUE')?._count || 0;

    // Compter les factures
    const invoicesCount = await prisma.invoice.count({
      where: { managerDataId: managerData?.id }
    });

    // Compter les partenaires des clients de ce manager
    const partnersCount = await prisma.partner.count({
      where: {
        client: {
          managerId
        }
      }
    });

    return NextResponse.json({
      clientsCount,
      tasksInProgress,
      tasksCompleted,
      tasksOverdue,
      invoicesCount,
      partnersCount
    });
  } catch (error) {
    console.error('Erreur lors de la récupération des stats du manager:', error);
    return NextResponse.json(
      { error: "Erreur lors de la récupération des données" },
      { status: 500 }
    );
  }
} 