<?php
/**
 * save.php — Backend mínimo para guardar data.json
 * Cawdal Weddings · v=20260407a
 *
 * GET:  devuelve data.json
 * POST: valida X-Admin-Pass, hace backup (últimos 5), escribe data.json
 *
 * IMPORTANTE: Cambiar $ADMIN_PASS por una contraseña segura
 */

// ─── CONFIGURACIÓN ────────────────────────────────────────────
$ADMIN_PASS   = 'cawdal2026';          // ← CAMBIAR EN PRODUCCIÓN
$DATA_FILE    = __DIR__ . '/data.json';
$BACKUP_DIR   = __DIR__ . '/backups';
$MAX_BACKUPS  = 5;

// ─── CORS & HEADERS ───────────────────────────────────────────
header('Content-Type: application/json; charset=utf-8');
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, X-Admin-Pass');
header('Cache-Control: no-store, no-cache, must-revalidate');

if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    http_response_code(200);
    exit;
}

// ─── GET: devolver data.json ───────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
    if (!file_exists($DATA_FILE)) {
        http_response_code(404);
        echo json_encode(['error' => 'data.json no encontrado']);
        exit;
    }
    echo file_get_contents($DATA_FILE);
    exit;
}

// ─── POST: guardar data.json ───────────────────────────────────
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
    // Validar contraseña
    $pass = $_SERVER['HTTP_X_ADMIN_PASS'] ?? '';
    if ($pass !== $ADMIN_PASS) {
        http_response_code(401);
        echo json_encode(['error' => 'Unauthorized']);
        exit;
    }

    // Leer body
    $raw = file_get_contents('php://input');
    $data = json_decode($raw, true);
    if (!$data || !isset($data['settings'])) {
        http_response_code(400);
        echo json_encode(['error' => 'JSON inválido o faltan campos obligatorios']);
        exit;
    }

    // NUNCA guardar leads en data.json (datos personales)
    unset($data['leads']);

    // Versión timestamp
    $data['_v'] = (int)(microtime(true) * 1000);

    // Backup de los últimos 5 archivos
    if (file_exists($DATA_FILE)) {
        if (!is_dir($BACKUP_DIR)) {
            mkdir($BACKUP_DIR, 0750, true);
        }
        $backupFile = $BACKUP_DIR . '/data_' . date('Ymd_His') . '.json';
        copy($DATA_FILE, $backupFile);

        // Limpiar backups antiguos (mantener últimos MAX_BACKUPS)
        $backups = glob($BACKUP_DIR . '/data_*.json');
        if ($backups && count($backups) > $MAX_BACKUPS) {
            usort($backups, function($a, $b) { return filemtime($a) - filemtime($b); });
            $toDelete = array_slice($backups, 0, count($backups) - $MAX_BACKUPS);
            foreach ($toDelete as $old) {
                @unlink($old);
            }
        }
    }

    // Escribir data.json
    $written = file_put_contents(
        $DATA_FILE,
        json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES),
        LOCK_EX
    );

    if ($written === false) {
        http_response_code(500);
        echo json_encode(['error' => 'No se pudo escribir data.json — verifica permisos (chmod 664)']);
        exit;
    }

    echo json_encode([
        'ok'      => true,
        '_v'      => $data['_v'],
        'written' => $written
    ]);
    exit;
}

http_response_code(405);
echo json_encode(['error' => 'Método no permitido']);
