<?php
/**
 * Fichier  : api/backup.php
 * Auteur   : KREMER Régis
 * Version  : 2.2.0
 * Date     : 2026-02-21
 * Description : API REST — Sauvegarde et restauration complète des données JSON
 *
 * Changelog :
 *   v2.1.0 (2026-02-21) — Version initiale auditée et sécurisée
 *   v2.1.1 (2026-02-21) — Corrections sécurité (CSRF, MIME, session, migrateSuppliers)
 *   v2.2.0 (2026-02-21) — Permissions magasins, bons de commande, rapport d'écart,
 *                      import CSV, historique prix, bon de livraison multi-lignes
 */
require_once dirname(__DIR__).'/config.php';
startSession(); requireAdmin();
$method=$_SERVER['REQUEST_METHOD'];
switch($method){
case 'GET':
    $backup=['_meta'=>['app'=>APP_NAME,'version'=>APP_VER,'exportDate'=>date('c')],'settings'=>getSettings(),'warehouses'=>loadData('warehouses'),'products'=>loadData('products'),'stock'=>loadData('stock'),'movements'=>loadData('movements'),'inventories'=>loadData('inventories'),'categories'=>loadData('categories'),'alerts'=>loadData('alerts')];
    header('Content-Type:application/json;charset=UTF-8');
    header('Content-Disposition:attachment;filename="stockmaster-backup-'.date('Y-m-d').'.json"');
    echo json_encode($backup,JSON_PRETTY_PRINT|JSON_UNESCAPED_UNICODE);exit;
case 'POST':
    csrfCheck();
    $body=json_decode(file_get_contents('php://input'),true);
    if(!is_array($body)||!isset($body['warehouses'])) jsonError('Format JSON invalide.');
    // Validate that each entity is an array before overwriting data
    foreach(['warehouses','products','stock','movements','inventories','categories','alerts'] as $e){
        if(isset($body[$e]) && !is_array($body[$e])) jsonError("Entité '{$e}' invalide dans le backup.");
    }
    if(isset($body['settings'])) saveSettings($body['settings']);
    foreach(['warehouses','products','stock','movements','inventories','categories','alerts'] as $e) if(isset($body[$e])) saveData($e,$body[$e]);
    jsonResponse(['ok'=>true,'message'=>'Données importées.']);
default: jsonError('Méthode non supportée.',405);
}
?>
