import { NextResponse } from "next/server";
import { cookies } from "next/headers";
import jwt from "jsonwebtoken";
import { db } from "@/lib/db";

const SECRET = process.env.JWT_SECRET!;

export async function GET(request: Request) {
  try {
    const { searchParams } = new URL(request.url);
    const scope = searchParams.get("scope");
    
    const cookieStore = await cookies();
    const token = cookieStore.get("token")?.value;
    if (!token) return NextResponse.json({ error: "No autorizado" }, { status: 401 });

    const sessionUser: any = jwt.verify(token, SECRET);
    const userId = sessionUser.id;

    // --- 1. CONSULTA DE USUARIOS (Líderes y Brigadistas) ---
    // Traemos created_by desde la tabla militants usando el militant_id
    let userQuery = `
      SELECT 
        u.id, 
        u.role, 
        u.full_name, 
        u.leader_id, 
        m.neighborhood,
        m.created_by as owner_id
      FROM users u
      LEFT JOIN militants m ON u.militant_id = m.id
      WHERE 1=1
    `;
    let userParams: any[] = [];

    if (scope === "mine") {
      // Filtramos usando el created_by que viene de la tabla militants
      userQuery += " AND m.created_by = ?";
      userParams.push(userId);
    }

    const [users]: any = await db.query(userQuery, userParams);

    // --- 2. CONSULTA DE MILITANTES BASE ---
    let milQuery = `
      SELECT id, first_name, last_name_paternal, last_name_maternal, 
             leader_id, brigadist_id, neighborhood, section_number, created_by
      FROM militants m
      WHERE m.id NOT IN (SELECT u2.militant_id FROM users u2 WHERE u2.militant_id IS NOT NULL)
    `;
    let milParams: any[] = [];

    if (scope === "mine") {
      milQuery += " AND m.created_by = ?";
      milParams.push(userId);
    }

    const [militantsBase]: any = await db.query(milQuery, milParams);

    // --- 3. ARMADO DE LA ESTRUCTURA ---
    const structure = users
      .filter((u: any) => u.role === 'leader')
      .map((leader: any) => ({
        ...leader,
        brigadists: users
          .filter((u: any) => u.role === 'brigadist' && u.leader_id === leader.id)
          .map((brig: any) => ({
            ...brig,
            militants: militantsBase.filter((m: any) => m.brigadist_id === brig.id)
          })),
        directMilitants: militantsBase.filter((m: any) => m.leader_id === leader.id && !m.brigadist_id)
      }));

    return NextResponse.json(structure);

  } catch (error: any) {
    console.error("STRUCTURE_ERROR_DETAIL:", error);
    return NextResponse.json({ error: "Error en el servidor" }, { status: 500 });
  }
}