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 { id, status } = await req.json(); // id del militante y status ('active' o 'inactive')
    
    const cookieStore = await cookies();
    const token = cookieStore.get("token")?.value;
    const decoded: any = verifyToken(token || "");

    // Validación de rango: Solo el Admin puede usar esta API de decisión final
    if (!decoded || decoded.role !== 'admin') {
      return NextResponse.json({ error: "Acceso denegado. Se requieren privilegios de Administrador." }, { status: 403 });
    }

    // 1. Actualizamos la tabla de MILITANTES (Cambio de status)
    // 'active' significa que pasó la revisión, 'inactive' significa rechazo/baja
    await db.query(
      "UPDATE militants SET status = ?, updated_at = CURRENT_TIMESTAMP WHERE id = ?",
      [status, id]
    );

    // 2. Buscamos si este militante tiene un usuario vinculado en la tabla USERS
    const [linkedUser]: any = await db.query(
      "SELECT id FROM users WHERE militant_id = ?",
      [id]
    );

    // 3. Si existe usuario vinculado, sincronizamos su acceso (active 1 o 0)
    if (linkedUser.length > 0) {
      const isActive = status === 'active' ? 1 : 0;
      await db.query(
        "UPDATE users SET active = ? WHERE militant_id = ?",
        [isActive, id]
      );
    }

    return NextResponse.json({ 
      success: true, 
      message: status === 'active' ? "Registro aprobado y acceso concedido." : "Registro rechazado y acceso revocado." 
    });

  } catch (error: any) {
    console.error("ADMIN_PROCESS_ERROR:", error);
    return NextResponse.json({ error: "Error al procesar la revisión" }, { status: 500 });
  }
}