<?php
/**
 * enum_urls.php — Enumera las URLs del sitio para el crawler de verificación (#121).
 *
 * Recuperado 2026-06-22 (el original no se había commiteado y se perdió). Reproduce
 * la composición de la corrida previa: menús×5 idiomas + categorías con contenido +
 * todo el contenido no-ES (el ES masivo ~24k se omite por volumen).
 *
 * Uso (dentro del contenedor, carga wp-load):
 *   docker cp enum_urls.php wordpress-web:/tmp/ && \
 *   docker exec wordpress-web php /tmp/enum_urls.php && \
 *   docker cp wordpress-web:/tmp/verify_urls.json urls.json
 *
 * Salida: /tmp/verify_urls.json — array de {url, lang, kind, id}.
 */

require_once '/var/www/html/wp-load.php';

$LANGS = ['es', 'en', 'fr', 'it', 'pt'];
$out = [];
$seen = [];

function add(&$out, &$seen, $url, $lang, $kind, $id) {
    $url = trailingslashit($url);
    $k = $lang . '|' . $url;
    if (isset($seen[$k])) return;
    $seen[$k] = true;
    $out[] = ['url' => $url, 'lang' => $lang, 'kind' => $kind, 'id' => (int) $id];
}

// ── 1) MENÚ: 31 rutas base × 5 idiomas ───────────────────────────────────────
// Rutas del menú principal (wp_navigation ID 1). Para no-ES se prefija /{lang}/;
// el crawler sigue redirecciones cross-idioma y las marca.
$menu_paths = [
    '', 'colaboradores', 'portal', 'paraponeraldialafe', 'category/cartasemana',
    'category/carta-semana-pasada', 'category/cartas-de-otras-semanas',
    'nueva-politica-de-privacidad', 'contactar', 'alta', 'alta-en-effa', 'escuela',
    'category/cartas-que-nos-llegan', 'category/tablon-de-anuncios',
    'category/asociacion-feadulta', 'numeros', 'category/comunidades-cristianas',
    'evangelio-diario-2024', 'category/indice-cronologico',
    'category/evangelios-y-comentarios', 'oraciones-eucaristicas', 'a-modo-de-salmo',
    'preces-y-oraciones-varias', 'te-creia-un-capricho-mas', 'autores-lista', 'temas',
    'multimedia', 'pensamientos', 'indice-cantoral', 'peliculas', 'in-memoriam',
];
$home = home_url('/'); // .../fea/
foreach ($LANGS as $lang) {
    $prefix = ($lang === 'es') ? $home : $home . $lang . '/';
    foreach ($menu_paths as $p) {
        add($out, $seen, $p === '' ? $prefix : $prefix . $p, $lang, 'menu', 0);
    }
}

// ── 2) CATEGORÍAS con contenido ──────────────────────────────────────────────
// ES: todas las categorías hide_empty. no-ES: solo las que tienen traducción.
$terms = get_terms(['taxonomy' => 'category', 'hide_empty' => true]);
foreach ($terms as $t) {
    $link = get_term_link($t);
    if (!is_wp_error($link)) add($out, $seen, $link, 'es', 'category', $t->term_id);
    if (function_exists('pll_get_term')) {
        foreach (['en', 'fr', 'it', 'pt'] as $lang) {
            $tr = pll_get_term($t->term_id, $lang);
            if ($tr) {
                $l = get_term_link((int) $tr, 'category');
                if (!is_wp_error($l)) add($out, $seen, $l, $lang, 'category', $tr);
            }
        }
    }
}

// ── 3) CONTENIDO no-ES (posts publicados en en/fr/it/pt) ─────────────────────
foreach (['en', 'fr', 'it', 'pt'] as $lang) {
    $q = new WP_Query([
        'post_type'      => 'post',
        'post_status'    => 'publish',
        'posts_per_page' => -1,
        'fields'         => 'ids',
        'lang'           => $lang,
        'no_found_rows'  => true,
    ]);
    foreach ($q->posts as $pid) {
        add($out, $seen, get_permalink($pid), $lang, 'content', $pid);
    }
}

file_put_contents('/tmp/verify_urls.json', json_encode($out, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE));
$by = [];
foreach ($out as $r) { $by[$r['kind']] = ($by[$r['kind']] ?? 0) + 1; }
fwrite(STDERR, 'enum: ' . count($out) . ' URLs ' . json_encode($by) . "\n");
