<?php
/**
 * Idempotent populate of translated image alt postmeta.
 * Usage: wp eval-file populate_alts.php /tmp/alt_final.json
 * JSON shape: { "<attachmentId>": { "en": "...", "es": "..." }, ... }
 */
$path = $args[0] ?? '/tmp/alt_final.json';
$raw  = @file_get_contents($path);
if ($raw === false) { WP_CLI::error("cannot read $path"); }
$map = json_decode($raw, true);
if (!is_array($map)) { WP_CLI::error("invalid JSON in $path"); }

$ok = 0; $skip = 0;
foreach ($map as $id => $t) {
    $id = (int) $id;
    if (!$id || get_post_type($id) !== 'attachment') { $skip++; continue; }
    if (!empty($t['en'])) {
        update_post_meta($id, '_wp_attachment_image_alt_en', wp_slash((string) $t['en']));
    }
    if (!empty($t['es'])) {
        update_post_meta($id, '_wp_attachment_image_alt_es', wp_slash((string) $t['es']));
    }
    $ok++;
}
WP_CLI::success("alts populated on {$ok} attachments ({$skip} skipped)");
