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;

    const decoded: any = verifyToken(token || "");
    
    if (!decoded) {
      return NextResponse.json({ error: "No autorizado" }, { status: 401 });
    }

    const [userCheck]: any = await db.query(
      "SELECT current_session_id FROM users WHERE id = ?", 
      [decoded.id]
    );

    if (!userCheck[0] || userCheck[0].current_session_id !== decoded.sessionId) {
      return NextResponse.json({ error: "SESION_INVALIDA" }, { status: 401 });
    }

    // --- LÓGICA DE CONTEOS ---
    const [militantsCount]: any = await db.query("SELECT COUNT(*) as total FROM militants");
    const [usersCount]: any = await db.query("SELECT COUNT(*) as total FROM users WHERE role IN ('admin', 'leader', 'brigadist')");

    // Colonias
    const [coloniasStats]: any = await db.query(`
      SELECT 
        (SELECT COUNT(DISTINCT neighborhood) FROM militants) as registradas,
        (SELECT COUNT(DISTINCT colonia) FROM sections) as totales
    `);

    // Secciones
    const [seccionesStats]: any = await db.query(`
      SELECT 
        (SELECT COUNT(DISTINCT section_number) FROM militants) as registradas,
        (SELECT COUNT(DISTINCT section_number) FROM sections) as totales
    `);

    // --- NUEVO: DATOS PARA LA GRÁFICA (SECTIONS DATA) ---
    // Agrupamos por sección_number y contamos cuántos hay en cada una
    const [sectionsData]: any = await db.query(`
      SELECT section_number as section, COUNT(*) as count 
      FROM militants 
      WHERE section_number IS NOT NULL AND section_number != ''
      GROUP BY section_number 
      ORDER BY section_number ASC
    `);

    const [latestReviews]: any = await db.query(`
      SELECT first_name, last_name_paternal, notes 
      FROM militants 
      WHERE status = 'review' 
      ORDER BY updated_at DESC 
      LIMIT 3
    `);

    return NextResponse.json({
      totalMilitantes: militantsCount[0].total,
      totalUsuarios: usersCount[0].total,
      colonias: {
        registradas: coloniasStats[0].registradas || 0,
        totales: coloniasStats[0].totales || 0
      },
      secciones: {
        registradas: seccionesStats[0].registradas || 0,
        totales: seccionesStats[0].totales || 0
      },
      latestReviews: latestReviews || [],
      sectionsData: sectionsData || [] // AHORA SÍ, LA GRÁFICA TENDRÁ DATOS
    });

  } catch (error: any) {
    console.error("STATS_ERROR:", error);
    return NextResponse.json(
      { error: "Error al obtener estadísticas" },
      { status: 500 }
    );
  }
}