'use strict';

// Rutas de Instagram que indican un challenge, captcha o suspensión de cuenta.
// La detección es por URL porque es más estable que selectores DOM obfuscados.
//
// IMPORTANTE: comparar por pathname normalizado (sin trailing slash) para cubrir:
//   /accounts/suspended          → igual que /accounts/suspended/
//   /accounts/suspended?next=... → el ? forma parte de search, no pathname
//   /accounts/suspended/#        → el # forma parte de hash, no pathname
const CHALLENGE_PATTERNS = [
    '/challenge',
    '/accounts/login/two_factor',
    '/accounts/login',          // sesión invalidada / expirada (redirige aquí sin two_factor)
    '/accounts/suspended',
    '/accounts/disabled',
    '/accounts/compromised',
    // Flujo "challenge picker" — IG pide elegir método de verificación (SMS/email)
    // ante actividad sospechosa. NO es un baneo: es el mismo checkpoint resolvible
    // que /challenge, solo que enrutado por la sub-app auth_platform en vez del
    // endpoint clásico. Prefijo amplio a propósito: cubre challengepicker y
    // cualquier otro paso de ese mismo flujo (selección de método, entrada de
    // código, etc.) que IG pueda enrutar bajo /auth_platform/*.
    '/auth_platform',
];

/**
 * Recibe la URL actual del navegador y devuelve si hay un challenge activo.
 * @param {string} url
 * @returns {{ detected: boolean, url?: string, pattern?: string }}
 */
function detect(url) {
    if (!url) return { detected: false };
    try {
        // Normalizar: quitar trailing slash del pathname para que tanto
        //   /accounts/suspended   como   /accounts/suspended/
        // coincidan con el mismo patrón.
        const parsed   = new URL(url);
        const pathname = parsed.pathname.replace(/\/+$/, ''); // strip trailing slashes

        for (const pattern of CHALLENGE_PATTERNS) {
            // startsWith cubre rutas con sub-paths (ej. /challenge/verify)
            if (pathname === pattern || pathname.startsWith(pattern + '/')) {
                return { detected: true, url, pattern };
            }
        }
    } catch (_) {}
    return { detected: false };
}

module.exports = { detect };
