<?php
/**
 * Runner de seed : wp eval-file wp-content/seed/run.php [pattern]
 * Lit tous les wp-content/seed/content/*.json (ou ceux qui matchent le pattern)
 * et les seed via lib.php. Idempotent, relançable.
 */

defined('ABSPATH') || exit;

require_once __DIR__ . '/lib.php';

$pattern = $args[0] ?? '*';
$files = glob(__DIR__ . "/content/{$pattern}.json");
if (!$files) { WP_CLI::error("aucun fichier content/{$pattern}.json"); }

// Deux passes : les relationships (grille_solutions, références liées...) ont
// besoin que tous les posts existent. Passe 1 = posts nus, passe 2 = champs.
$docs = [];
foreach ($files as $f) {
    $doc = json_decode(file_get_contents($f), true);
    if (json_last_error() !== JSON_ERROR_NONE) { WP_CLI::warning(basename($f) . ' : JSON invalide — ' . json_last_error_msg()); continue; }
    $docs[basename($f)] = $doc;
}

// Passe 1 : créer les posts nus DANS LEUR LANGUE (pour que les relations et les
// recherches slug+langue de la passe 2 trouvent le bon post). cvbseed_ensure_post
// gère le slug partagé entre langues (Polylang).
foreach ($docs as $name => $doc) {
    if (($doc['type'] ?? 'page') === 'options') continue;
    $type = $doc['type'] ?? 'page';
    $slug = $doc['slug'] ?? null;
    if (!$slug) { WP_CLI::warning("$name : slug manquant"); continue; }
    $lang = $doc['lang'] ?? 'fr';
    $GLOBALS['cvbseed_lang'] = $lang;
    cvbseed_ensure_post($type, $slug, $lang, $doc['title'] ?? $slug, $doc['status'] ?? 'publish');
}

// Passe 2 : champs (seo, fiche_*, sections, relations).
foreach ($docs as $name => $doc) {
    WP_CLI::log("— $name");
    cvbseed_document($doc);
}

// Passe 3 : lier les traductions (FR/EN/ES) une fois tous les posts créés et langués.
if (!empty($GLOBALS['cvbseed_links'])) {
    $linked = 0;
    foreach ($GLOBALS['cvbseed_links'] as $byLang) {
        if (count(array_filter($byLang)) > 1) { cvbseed_link_translations($byLang); $linked++; }
    }
    WP_CLI::success("traductions liées : $linked groupe(s)");
}

WP_CLI::success('seed terminé (' . count($docs) . ' documents)');
