<?php
/**
 * Fichier  : backup_cron.php
 * Auteur   : KREMER Régis
 * Version  : 2.6.102
 * Date     : 2026-07-21
 * Description : Sauvegarde automatique des données JSON, exécutable uniquement en CLI.
 *
 * Changelog :
 *   v2.6.102 (2026-07-21) — Configuration LDAP sauvegardée désactivée ; audit et secrets LDAP exclus.
 */
if(PHP_SAPI !== 'cli') { http_response_code(404); exit; }
require_once __DIR__ . '/config.php';

if(!is_dir(BACKUPS_DIR) && !mkdir(BACKUPS_DIR, 0775, true)) {
    fwrite(STDERR, "Impossible de créer le dossier backups.\n");
    exit(1);
}

$files = glob(DATA_DIR . '/*.json') ?: [];
$data = [];
foreach($files as $file) {
    $entity = basename($file, '.json');
    if(in_array($entity, ['rate_limits','ldap_audit'], true)) continue;
    $decoded = json_decode((string)file_get_contents($file), true);
    if(json_last_error() !== JSON_ERROR_NONE) {
        fwrite(STDERR, "JSON invalide : " . basename($file) . "\n");
        exit(1);
    }
    if($entity === 'ldap_settings' && is_array($decoded[0] ?? null)) {
        $decoded[0]['enabled'] = false;
        $decoded[0]['mode'] = 'local';
        $decoded[0]['lastSuccessfulTestAt'] = '';
        $decoded[0]['lastSuccessfulTestFingerprint'] = '';
        $decoded[0]['lastSuccessfulTestUser'] = '';
    }
    $data[$entity] = $decoded;
}
$data['_backup_meta'] = [
    'application'=>'MageStock',
    'version'=>APP_VER,
    'date'=>date('c'),
    'entities'=>array_values(array_keys($data)),
    'excluded'=>['rate_limits','ldap_audit','ldap_bind_secret','ldap_master_key','ldap_ca_certificate'],
];

$filename = 'backup_' . date('Y-m-d_H-i-s') . '.json';
$path = BACKUPS_DIR . '/' . $filename;
$json = json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
if($json === false || file_put_contents($path, $json, LOCK_EX) === false) {
    fwrite(STDERR, "Échec de la sauvegarde.\n");
    exit(1);
}
@chmod($path, 0640);

$backups = glob(BACKUPS_DIR . '/backup_*.json') ?: [];
usort($backups, static fn($a,$b)=>(filemtime($b) ?: 0) <=> (filemtime($a) ?: 0));
foreach(array_slice($backups, 30) as $old) @unlink($old);

echo "Sauvegarde créée : {$filename}\n";
