<?php
/**
 * Enregistre les langues Polylang : fr (défaut), en, es — codes NEUTRES (le slug
 * exposé est fr/en/es ; le `locale` interne fr_FR/en_US/es_ES est requis par WP
 * mais n'est jamais exposé côté front/GraphQL). Idempotent.
 *
 *   wp eval-file wp-content/seed/register-languages.php
 *
 * Polylang free ne fournit PAS les commandes `wp pll` (réservées à Pro), d'où ce
 * passage par l'API model (PLL()->model->add_language()).
 */

defined('ABSPATH') || exit;

if (!function_exists('PLL') || !PLL() || !isset(PLL()->model)) {
    WP_CLI::error('Polylang (PLL()->model) indisponible — le plugin est-il actif ?');
}

$model = PLL()->model;

$langs = [
    ['name' => 'Français', 'slug' => 'fr', 'locale' => 'fr_FR', 'rtl' => 0, 'flag' => 'fr', 'term_group' => 0],
    ['name' => 'English',  'slug' => 'en', 'locale' => 'en_US', 'rtl' => 0, 'flag' => 'us', 'term_group' => 1],
    ['name' => 'Español',  'slug' => 'es', 'locale' => 'es_ES', 'rtl' => 0, 'flag' => 'es', 'term_group' => 2],
];

foreach ($langs as $l) {
    if ($model->get_language($l['slug'])) {
        WP_CLI::log("déjà présent : {$l['slug']}");
        continue;
    }
    $res = $model->add_language($l);
    if (is_wp_error($res)) {
        WP_CLI::warning("échec {$l['slug']} : " . $res->get_error_message());
    } else {
        WP_CLI::success("langue ajoutée : {$l['slug']}");
    }
}

// Langue par défaut = fr.
$opts = get_option('polylang');
if (is_array($opts)) {
    $opts['default_lang'] = 'fr';
    update_option('polylang', $opts);
}
if (method_exists($model, 'clean_languages_cache')) {
    $model->clean_languages_cache();
}

$list  = $model->get_languages_list();
$slugs = is_array($list) ? array_filter(array_map(static fn($x) => is_object($x) ? $x->slug : '', $list)) : [];
WP_CLI::log('langues présentes : ' . implode(', ', $slugs));
