<?php
/**
 * Logique de la Grue de Chantier (Git & Manifest) corrigée
 */
if ( ! defined( 'ABSPATH' ) ) exit;

function wpkginst_sync_automation_catalog() {
    $repo_url    = get_option('wpkginst_automation_repo_url', 'https://github.com/elestranobaron/wp-package-installator-playbooks.git');
    $folder_name = get_option('wpkginst_automation_folder_name', 'wp-playbooks');
    $target_dir  = '/tmp/' . $folder_name;

    // 1. Exécution de la synchro Git
    $cmd = "if [ ! -d \"$target_dir\" ]; then " .
           "cd /tmp && git clone --depth 1 " . escapeshellarg($repo_url) . " " . escapeshellarg($folder_name) . "; " .
           "else " .
           "cd \"$target_dir\" && git fetch --all && git reset --hard origin/$(git symbolic-ref --short HEAD); " .
           "fi 2>&1";

    $ssh_res = wpkginst_execute_ssh_command($cmd);

    // On extrait le log proprement pour le JS
    $execution_log = is_array($ssh_res) ? ($ssh_res['output'] ?? $ssh_res['message'] ?? 'Sortie vide') : (string)$ssh_res;

    // 2. Lecture du manifest via SSH (pour éviter les problèmes de permissions locales PHP)
    $manifest_cmd = "cat " . escapeshellarg($target_dir . '/manifest.json') . " 2>/dev/null";
    $json_res = wpkginst_execute_ssh_command($manifest_cmd);

    $json_content = is_array($json_res) ? ($json_res['output'] ?? '') : (string)$json_res;

    if (!empty($json_content)) {
        $content = json_decode($json_content, true);

        // On accepte 'packages' ou 'playbooks' pour être flexible
        $playbooks = $content['packages'] ?? $content['playbooks'] ?? null;

        if (json_last_error() === JSON_ERROR_NONE && !is_null($playbooks)) {
            return [
                'success'  => true,
                'packages' => $playbooks,
                'log'      => $execution_log // Correction de la clé ici (utilisée par formatLog en JS)
            ];
        }
    }

    return [
        'success' => false,
        'message' => 'Synchro terminée, mais manifest.json introuvable ou mal formé.',
        'log'     => $execution_log
    ];
}
