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

export async function POST(req: Request) {
  try {
    const { campaignId, neighborhoods, leaderInstructions } = await req.json();
    const cookieStore = await cookies();
    const token = cookieStore.get("token")?.value;
    const decoded: any = verifyToken(token || "");

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

    // 1. Marcamos cumplimiento del LÍDER (para que el Admin lo vea)
    await db.query(
      "UPDATE campaign_tracking SET is_disseminated = 1, disseminated_at = NOW() WHERE campaign_id = ? AND user_id = ?",
      [campaignId, decoded.id]
    );

    // 2. Buscamos brigadistas 
    let query = `
      SELECT u.id 
      FROM users u
      INNER JOIN militants m ON u.militant_id = m.id
      WHERE u.role = 'brigadist' AND u.active = 1
    `;
    let params: any[] = [];

    if (neighborhoods && neighborhoods.length > 0) {
      query += " AND m.neighborhood IN (?)";
      params.push(neighborhoods);
    } else {
      query += " AND m.neighborhood IN (SELECT neighborhood FROM militants WHERE id = (SELECT militant_id FROM users WHERE id = ?))";
      params.push(decoded.id);
    }

    const [brigadistas]: any = await db.query(query, params);

    // 3. Activamos la misión con las INSTRUCCIONES DEL LÍDER
    if (brigadistas.length > 0) {
      // Preparamos los datos incluyendo las instrucciones
      const trackingValues = brigadistas.map((b: any) => [
        campaignId, 
        b.id, 
        leaderInstructions // <--- Pasamos la instrucción aquí
      ]);
      
      // Usamos INSERT ... ON DUPLICATE KEY UPDATE para que si el líder 
      // actualiza las instrucciones y vuelve a dar clic, se guarden las nuevas.
      await db.query(
        `INSERT INTO campaign_tracking (campaign_id, user_id, leader_instructions) 
         VALUES ? 
         ON DUPLICATE KEY UPDATE leader_instructions = VALUES(leader_instructions)`,
        [trackingValues]
      );
    }

    return NextResponse.json({ ok: true, brigadistasActivados: brigadistas.length });
  } catch (error) {
    console.error("CONFIRM_ERROR:", error);
    return NextResponse.json({ error: "Error al desplegar misión" }, { status: 500 });
  }
}