import { NextResponse } from "next/server";
import { db } from "@/lib/db";
import { cookies } from "next/headers";
import { verifyToken } from "@/lib/auth";

export async function GET() {
  try {
    const cookieStore = await cookies();
    const token = cookieStore.get("token")?.value;

    if (!token) {
      return NextResponse.json({ error: "No hay token" }, { status: 401 });
    }

    const decoded: any = verifyToken(token);

    if (!decoded || decoded.role !== 'leader') {
      return NextResponse.json({ error: "No autorizado" }, { status: 403 });
    }

    const leaderUserId = decoded.id; // ID del usuario líder (ej: 8)

    // 1. Obtener el militant_id del líder para filtrar en la tabla militants
    const [userRow]: any = await db.query(
      "SELECT militant_id FROM users WHERE id = ?", 
      [leaderUserId]
    );
    const leaderMilitantId = userRow[0]?.militant_id;

    // 2. Query Corregido: 
    // - totalMilitantes: los que tienen el militant_id del líder como leader_id
    // - totalBrigadistas: usuarios en la tabla 'users' cuyo jefe sea este líder
    // NOTA: Cambié parent_id por leader_id en el subquery de users
    const [stats]: any = await db.query(`
      SELECT 
        COUNT(*) as totalMilitantes,
        (SELECT COUNT(*) FROM users WHERE leader_id = ?) as totalBrigadistas
      FROM militants 
      WHERE leader_id = ?
    `, [leaderUserId, leaderMilitantId]);

    // 3. Avance territorial: Colonias y Secciones donde tiene presencia
    const [geoStats]: any = await db.query(`
      SELECT 
        COUNT(DISTINCT neighborhood) as colonias,
        COUNT(DISTINCT section_number) as secciones
      FROM militants 
      WHERE leader_id = ?
    `, [leaderMilitantId]);

    return NextResponse.json({
      totalMilitantes: stats[0].totalMilitantes || 0,
      totalBrigadistas: stats[0].totalBrigadistas || 0,
      colonias: geoStats[0].colonias || 0,
      secciones: geoStats[0].secciones || 0,
      userName: decoded.name
    });

  } catch (error) {
    console.error("LEADER_STATS_ERROR:", error);
    return NextResponse.json({ error: "Error en la consulta de base de datos" }, { status: 500 });
  }
}