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 || decoded.role !== 'leader') {
      return NextResponse.json({ error: "No autorizado" }, { status: 401 });
    }

    // 1. Obtenemos la última campaña que tiene asignada este líder específicamente
    const [campaigns]: any = await db.query(`
      SELECT c.*, t.is_read, t.is_disseminated 
      FROM digital_campaigns c
      JOIN campaign_tracking t ON c.id = t.campaign_id
      WHERE t.user_id = ?
      ORDER BY c.created_at DESC
      LIMIT 1
    `, [decoded.id]);

    if (campaigns.length === 0) {
      return NextResponse.json({ message: "No hay campañas activas" });
    }

    const campaign = campaigns[0];

    // 2. Obtener el estatus de sus brigadistas (solo los que están en su zona)
    const [trackers]: any = await db.query(`
      SELECT 
        u.id, 
        u.full_name as user_name, 
        t.is_read, 
        t.read_at,
        m.neighborhood
      FROM users u
      INNER JOIN militants m ON u.militant_id = m.id
      LEFT JOIN campaign_tracking t ON u.id = t.user_id AND t.campaign_id = ?
      WHERE u.role = 'brigadist'
      AND m.neighborhood IN (
        SELECT neighborhood FROM militants WHERE id = (
          SELECT militant_id FROM users WHERE id = ?
        )
      )
    `, [campaign.id, decoded.id]);

    // Marcar como leída por el líder al momento de consultar
    await db.query(
      "UPDATE campaign_tracking SET is_read = 1, read_at = NOW() WHERE campaign_id = ? AND user_id = ?",
      [campaign.id, decoded.id]
    );

    return NextResponse.json({
      ...campaign,
      trackers: trackers 
    });

  } catch (error) {
    console.error("LEADER_GET_ERROR:", error);
    return NextResponse.json({ error: "Error de servidor al obtener misión" }, { status: 500 });
  }
}