<?php
/**
 * Sauvegarde de la base SQLite du site.
 * - Copie horodatée via l'API SQLite (sûr même si écriture en cours)
 * - Rotation : conserve les 14 derniers jours
 * Lancé par cron (voir crontab) et appelable en CLI.
 */
$src = __DIR__ . '/data/tuina.sqlite';
$dir = __DIR__ . '/data/backups';
if (!is_dir($dir)) mkdir($dir, 0755, true);

if (!is_file($src)) { fwrite(STDERR, "Base introuvable\n"); exit(1); }

$stamp = date('Y-m-d_His');
$dest = $dir . '/tuina-' . $stamp . '.sqlite';

try {
    // sauvegarde cohérente via l'API SQLite (VACUUM INTO)
    $db = new PDO('sqlite:' . $src);
    $db->exec("VACUUM INTO " . $db->quote($dest));
    $db = null;
} catch (Throwable $e) {
    // repli : copie fichier simple
    copy($src, $dest);
}

// compression gzip pour gagner de la place
if (is_file($dest)) {
    $gz = $dest . '.gz';
    $in = fopen($dest, 'rb');
    $out = gzopen($gz, 'wb9');
    while (!feof($in)) gzwrite($out, fread($in, 1<<16));
    fclose($in); gzclose($out);
    unlink($dest);
}

// rotation : supprimer les sauvegardes de plus de 14 jours
$limite = time() - 14 * 86400;
foreach (glob($dir . '/tuina-*.sqlite.gz') as $f) {
    if (filemtime($f) < $limite) @unlink($f);
}

echo "Sauvegarde OK : " . basename($dest) . ".gz\n";
