chrome.storage.local.get(["join_auto", "current_group_community_status"], async (data) => {
    const auto = data.join_auto;
    const communityStatus = data.current_group_community_status;
    
    // --- 1. CONFIGURACIÓN Y ESTADO ---
    const wait = (ms) => new Promise(r => setTimeout(r, ms));
    
    // UI flotante de control
    function createUI() {
        if (document.getElementById("fb-joiner-log")) return;
        const debugBox = document.createElement("div");
        debugBox.id = "fb-joiner-log";
        debugBox.style.cssText = `
            position: fixed; bottom: 20px; right: 20px; 
            background: rgba(0,0,0,0.9); color: #00ff00; 
            padding: 20px; z-index: 999999; font-family: 'Consolas', monospace; 
            font-size: 14px; border-radius: 15px; width: 320px;
            border: 2px solid #333; box-shadow: 0 10px 30px rgba(0,0,0,0.5);
        `;
        
        let alertHtml = '';
        if (communityStatus && communityStatus.registrado) {
            const nombres = communityStatus.miembros.map(m => m.nombre_usuario).join(', ');
            alertHtml = `
                <div style="background: #fef08a; color: #854d0e; padding: 10px; border-radius: 8px; font-size: 12px; font-weight: bold; margin-bottom: 12px; border: 1px solid #eab308; font-family: sans-serif;">
                    ⚠️ ALERTA DE COMUNIDAD:<br>
                    Este grupo ya lo tiene registrado:<br>
                    <span style="color: #a16207;">${nombres}</span>
                </div>
            `;
        }
        
        let html = `
            <div style="display:flex; justify-content:space-between; margin-bottom:10px;">
                <b style="color: white">📥 INGRESADOR GRUPOS</b>
            </div>
            ${alertHtml}
            <div id="log-status" style="margin-bottom: 15px; height: 40px; color: #00ff00;">Analizando grupo...</div>
        `;
        
        if (!auto) {
            html += `
                <div style="display: flex; gap: 8px; margin-top: 10px;">
                    <button id="btn-cancel-join" style="
                        flex: 1; padding: 10px; background: #6b7280; 
                        border: none; color: white; border-radius: 8px; 
                        font-weight: bold; cursor: pointer;
                    ">Cancelar</button>
                    <button id="btn-next-join" style="
                        flex: 1; padding: 10px; background: #3b82f6; 
                        border: none; color: white; border-radius: 8px; 
                        font-weight: bold; cursor: pointer;
                    ">Siguiente</button>
                </div>
            `;
        }
        
        debugBox.innerHTML = html;
        document.body.appendChild(debugBox);
        
        if (!auto) {
            document.getElementById("btn-next-join").addEventListener("click", () => {
                let joinBtn = Array.from(document.querySelectorAll('[role="button"]'))
                    .find(btn => {
                        let txt = btn.innerText?.toLowerCase() || "";
                        return txt.includes("unirse al grupo") || txt.includes("unirte al grupo") || txt.includes("join group") || txt.includes("unirse") || txt.includes("unirte");
                    });
                if (joinBtn) {
                    joinBtn.click();
                }
                terminar("success", "Siguiente manual");
            });
            
            document.getElementById("btn-cancel-join").addEventListener("click", () => {
                terminar("cancelled", "Cancelado manual");
            });
        }
    }
    
    function updateLog(msg, color = "#00ff00") {
        const el = document.getElementById("log-status");
        if (el) {
            el.innerText = msg;
            el.style.color = color;
        }
    }
    
    function terminar(status, motivo) {
        chrome.runtime.sendMessage({
            type: "JOIN_RESULT",
            data: {
                status: status,
                motivo: motivo,
                url: window.location.href
            }
        });
    }
    
    createUI();
    updateLog("Analizando grupo y verificando filtros...", "#00ff00");
    
    // Esperar 1.5s para asegurar renderizado completo de textos y banners de Facebook
    await wait(1500);

    const mainEl = document.querySelector('[role="main"]') || document.body;
    const bodyText = document.body.innerText || "";
    const mainText = mainEl.innerText || "";
    const combinedText = (bodyText + " " + mainText).toLowerCase();
    
    // 📌 FILTRO 1: DETECTAR PRIMERO SI EL GRUPO ESTÁ EN PAUSA
    const esPausado = 
        combinedText.includes("en pausa") ||
        combinedText.includes("pausado") ||
        combinedText.includes("pausada") ||
        combinedText.includes("pausaron") ||
        combinedText.includes("pausó") ||
        combinedText.includes("se ha pausado") ||
        combinedText.includes("se han pausado") ||
        combinedText.includes("se pausó") ||
        combinedText.includes("se pausaron") ||
        combinedText.includes("se puso en pausa") ||
        combinedText.includes("se pusieron en pausa") ||
        combinedText.includes("publicaciones en pausa") ||
        combinedText.includes("publicaciones pausadas") ||
        combinedText.includes("actividad en pausa") ||
        combinedText.includes("actividad pausada") ||
        combinedText.includes("group is paused") ||
        combinedText.includes("group paused") ||
        combinedText.includes("posts are paused") ||
        combinedText.includes("posting is paused") ||
        combinedText.includes("posting paused") ||
        combinedText.includes("activity is paused") ||
        combinedText.includes("activity paused") ||
        combinedText.includes("paused by admin") ||
        combinedText.includes("admin paused");

    if (esPausado) {
        updateLog("⚠️ Grupo pausado (No apto)", "yellow");
        await wait(2000);
        terminar("skipped", "No apto (Grupo Pausado)");
        return;
    }

    // 📌 FILTRO 2: DETECTAR GRUPO DE SOLO VENTAS
    const esVentas = !window.location.href.includes('view=group_discussion') && 
                     (bodyText.includes("¿Qué vendes?") || bodyText.includes("What are you selling?"));
    
    if (esVentas) {
        updateLog("⚠️ Grupo de ventas (No apto)", "yellow");
        await wait(2000);
        terminar("skipped", "No apto (Solo Ventas)");
        return;
    }

    // 📌 FILTRO 3: PESTAÑA CONVERSACIÓN / DISCUSIÓN
    const tieneTabConversacion = Array.from(document.querySelectorAll('a, [role="tab"], span'))
        .some(el => {
            const txt = el.innerText?.trim().toLowerCase() || "";
            return txt === "conversación" || txt === "discussion" || txt === "conversar" || txt === "discusión";
        });
    const esPrivado = bodyText.includes("Grupo privado") || bodyText.includes("Private group") || 
                      bodyText.includes("grupo privado") || bodyText.includes("private group");

    if (!esPrivado && !tieneTabConversacion) {
        updateLog("⚠️ Sin pestaña Conversación (No apto)", "yellow");
        await wait(2000);
        terminar("skipped", "No apto para publicar (Sin conversación)");
        return;
    }
    
    // 📌 FILTRO 4: VERIFICAR SI YA SOMOS MIEMBROS
    const buttons = Array.from(document.querySelectorAll('[role="button"], [role="tab"]'));
    const esMiembro = buttons.some(btn => {
        const txt = btn.innerText?.trim().toLowerCase() || "";
        return txt === "eres miembro" || txt === "miembro" || txt === "member" || txt === "unido" || txt === "joined";
    }) || mainText.includes("Eres miembro") || mainText.includes("Miembro de este grupo");

    if (esMiembro) {
        updateLog("Ya eres miembro de este grupo. Omitiendo...", "cyan");
        await wait(2000);
        terminar("skipped", "Ya eres miembro");
        return;
    }

    // 📌 FILTRO 5: VERIFICAR SI LA SOLICITUD YA ESTÁ PENDIENTE
    const esPendiente = buttons.some(btn => {
        const txt = btn.innerText?.trim().toLowerCase() || "";
        return txt.includes("cancelar solicitud") || txt.includes("solicitud enviada") || txt.includes("pendiente") || txt.includes("cancel request") || txt.includes("pending");
    }) || mainText.includes("Cancelar solicitud") || mainText.includes("Solicitud enviada");

    if (esPendiente) {
        updateLog("Solicitud de unión ya pendiente. Omitiendo...", "cyan");
        await wait(2000);
        terminar("skipped", "Solicitud ya pendiente");
        return;
    }

    // 📌 SI HA PASADO TODOS LOS FILTROS -> EL GRUPO ES APTO
    updateLog("✅ Grupo apto para unirse. Procediendo...", "#00ff00");

    if (auto) {
        const headerContainer = document.querySelector('[role="main"]') || document;
        let joinBtn = Array.from(headerContainer.querySelectorAll('[role="button"]'))
            .filter(btn => {
                // Ignorar botones dentro de tarjetas de grupos sugeridos
                const parentCard = btn.closest('[aria-label*="Sugeridos"], [aria-label*="Suggested"], [data-pagelet*="Suggested"], [role="listitem"]');
                return !parentCard;
            })
            .find(btn => {
                let txt = btn.innerText?.toLowerCase() || "";
                return txt.includes("unirse al grupo") || txt.includes("unirte al grupo") || txt.includes("join group") || txt.includes("unirse") || txt.includes("unirte");
            });
            
        if (joinBtn) {
            updateLog("Haciendo clic en el botón de unirse...");
            joinBtn.click();
            
            // Esperar 3.5 segundos a que aparezca posible modal de preguntas
            await wait(3500);

            // Verificar de forma precisa si apareció un modal VISIBLE de preguntas de administración
            const detectModalPreguntas = () => {
                // 1. Filtrar diálogos que estén actualmente VISIBLES en pantalla
                const visibleDialogs = Array.from(document.querySelectorAll('[role="dialog"]'))
                    .filter(dialog => {
                        const rect = dialog.getBoundingClientRect();
                        const style = window.getComputedStyle(dialog);
                        return rect.width > 150 && rect.height > 150 && style.display !== 'none' && style.visibility !== 'hidden' && style.opacity !== '0';
                    });

                if (visibleDialogs.length === 0) return false;

                // 2. Escanear solo el contenido INTERNO del diálogo visible
                for (const dialog of visibleDialogs) {
                    const dialogText = (dialog.innerText || "").toLowerCase();
                    
                    const tieneCamposRespuesta = dialog.querySelectorAll('textarea, input[type="text"], input[type="radio"], input[type="checkbox"], [contenteditable="true"]').length > 0;
                    const tieneFrasePregunta = 
                        dialogText.includes("responde las preguntas") ||
                        dialogText.includes("responder preguntas") ||
                        dialogText.includes("responde a estas preguntas") ||
                        dialogText.includes("preguntas para los miembros") ||
                        dialogText.includes("preguntas de los administradores") ||
                        dialogText.includes("solicitud para unirte al grupo") ||
                        dialogText.includes("answer questions") ||
                        dialogText.includes("questions from admins") ||
                        dialogText.includes("membership questions");

                    if (tieneCamposRespuesta || tieneFrasePregunta) {
                        return true;
                    }
                }

                return false;
            };

            if (detectModalPreguntas()) {
                updateLog("❓ Modal de preguntas detectado. Responde las preguntas y haz clic en Respondido.", "#f59e0b");
                
                const container = document.getElementById("fb-joiner-log");
                if (container && !document.getElementById("btn-answered-join")) {
                    const btnAnswered = document.createElement("button");
                    btnAnswered.id = "btn-answered-join";
                    btnAnswered.innerText = "✅ Respondido";
                    btnAnswered.style.cssText = `
                        width: 100%; margin-top: 10px; padding: 10px; 
                        background: #10b981; border: none; color: white; 
                        border-radius: 8px; font-weight: bold; cursor: pointer;
                        font-size: 14px; box-shadow: 0 4px 6px rgba(0,0,0,0.3);
                    `;
                    btnAnswered.addEventListener("click", () => {
                        updateLog("Enviando reporte de preguntas respondidas...", "#10b981");
                        terminar("success", "Solicitud enviada (Preguntas respondidas)");
                    });
                    container.appendChild(btnAnswered);
                }
            } else {
                await wait(2000);
                terminar("success", "Solicitud automática enviada");
            }
        } else {
            terminar("failed", "Botón unirse no encontrado");
        }
    } else {
        updateLog("Haz clic en Unirse al grupo de forma manual y presiona Siguiente.", "cyan");
    }
});

