<?php
// cms/reviews-why-update.php
header('Content-Type: application/json');

// 1. INCLUIR OPTIMIZADOR Y DB
require_once('image_optimizer.php'); 
require_once('db_connection.php');

if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
    http_response_code(405);
    echo json_encode(['success' => false, 'message' => 'Método No Permitido']);
    exit;
}

$uploadDirBase = 'uploads/reviews-why/';
$uploadDirFull = '../' . $uploadDirBase; 

if (!is_dir($uploadDirFull)) {
    if (!mkdir($uploadDirFull, 0777, true)) {
        // Fallback si no se puede crear la carpeta
        $uploadDirFull = '../uploads/'; 
    }
}

/**
 * Procesa la subida de archivo: optimiza, redimensiona y fuerza la conversi\u00f3n a WebP.
 * @param string $fileInputName Nombre del campo en $_FILES.
 * @param string $baseUploadDir Ruta base para guardar en DB.
 * @return string|null La ruta relativa final para la DB (ej: 'uploads/reviews-why/nombre.webp'), o null si no se subi\u00f3 un nuevo archivo.
 */
function handleOptimizedUpload($fileInputName, $baseUploadDir) {
    if (!isset($_FILES[$fileInputName]) || $_FILES[$fileInputName]['error'] !== UPLOAD_ERR_OK) {
        return null;
    }
    
    $file = $_FILES[$fileInputName];
    $tempPath = $file['tmp_name'];

    // *** REGLA DE RESOLUCIÓN Y WEBP ***
    $maxWidth = 1920; 
    
    $fileName = uniqid('reviews_why_bg_') . '.webp'; // Fuerza la extensi\u00f3n a WEBP
    $destinationPathFull = '../' . $baseUploadDir . $fileName;

    // Llama a la funci\u00f3n de optimizaci\u00f3n
    $success = optimizeAndSaveImage($tempPath, $destinationPathFull, $maxWidth);

    if (!$success) {
        throw new Exception("Error al optimizar la imagen '{$fileInputName}'. Método No Permitido");
    }
    
    // Devuelve la ruta relativa para guardar en la base de datos
    return $baseUploadDir . $fileName;
}

/**
 * Elimina un archivo si existe y si no es una ruta de fallback o URL absoluta.
 * @param string|null $dbPath La ruta guardada en la base de datos.
 */
function deleteOldImage(?string $dbPath): void {
    if ($dbPath && !str_starts_with($dbPath, 'img/') && !str_starts_with($dbPath, 'https://') && !str_starts_with($dbPath, 'http://')) {
        $fullPath = '../' . $dbPath; 
        if (file_exists($fullPath) && is_writable($fullPath)) {
            unlink($fullPath);
            // error_log("Old reviews why image deleted: " . $fullPath); 
        }
    }
}


try {
    $pdo->beginTransaction();
    
    // 1. Obtener la imagen anterior
    $stmtCurrent = $pdo->query("SELECT background_image FROM cms_reviews_why WHERE id = 1")->fetch(PDO::FETCH_ASSOC);
    $old_bg_image = $stmtCurrent ? $stmtCurrent['background_image'] : null;
    $background_image = $old_bg_image; // Valor por defecto

    // 2. Procesar y obtener la nueva ruta de imagen (Optimizado y WebP)
    $new_bg_path = handleOptimizedUpload('bg_image_upload', $uploadDirBase);
    
    if ($new_bg_path) {
        // Se subió una nueva imagen optimizada
        $background_image = $new_bg_path;
        deleteOldImage($old_bg_image); // Eliminar la imagen anterior
    } elseif (isset($_POST['current_bg_image']) && !empty($_POST['current_bg_image'])) {
        $background_image = strip_tags($_POST['current_bg_image']);
    }


    // 3. Sanitizar y obtener los datos del Hero (Textos)
    $badge_text = strip_tags(htmlspecialchars_decode($_POST['badge_text'] ?? ''));
    $title_1 = strip_tags(htmlspecialchars_decode($_POST['title_1'] ?? ''));
    $title_2 = strip_tags(htmlspecialchars_decode($_POST['title_2'] ?? ''));
    $description = strip_tags(htmlspecialchars_decode($_POST['description'] ?? ''));

    // 4. Actualizar la tabla principal
    $sqlHero = "UPDATE cms_reviews_why SET 
        badge_text=?, title_1=?, title_2=?, description=?, 
        background_image=?, updated_at=NOW() 
        WHERE id=1";
    
    $stmtHero = $pdo->prepare($sqlHero);
    $stmtHero->execute([
        $badge_text, $title_1, $title_2, $description, $background_image
    ]);

    // 5. Manejar la lista de ítems (CRUD de cms_reviews_why_items)
    $items = json_decode($_POST['items_data'] ?? '[]', true);
    $existingItemIds = [];

    // Eliminar todos los items anteriores de la DB antes de insertar los nuevos
    $stmtDelete = $pdo->prepare("DELETE FROM cms_reviews_why_items WHERE why_id = 1");
    $stmtDelete->execute();
    
    $sql = "INSERT INTO cms_reviews_why_items (why_id, item_icon, item_title, item_description, sort_order) VALUES (1, ?, ?, ?, ?)";
    $stmtItem = $pdo->prepare($sql);
    
    foreach ($items as $item) {
        $item_icon = strip_tags($item['item_icon'] ?? '');
        $item_title = strip_tags($item['item_title'] ?? '');
        $item_description = strip_tags($item['item_description'] ?? '');
        $sort_order = intval($item['sort_order'] ?? 0);

        if (!empty($item_title)) {
            $stmtItem->execute([$item_icon, $item_title, $item_description, $sort_order]);
        }
    }


    $pdo->commit();
    echo json_encode([
        'success' => true, 
        'message' => 'SiteFlow Actualizado Exitosamente',
        'data' => [
            'background_image' => $background_image
        ]
    ]);
} catch (Exception $e) {
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    http_response_code(500);
    error_log("Error en reviews-why-update.php: " . $e->getMessage());
    echo json_encode(['success' => false, 'message' => 'Error Al Guardar: ' . $e->getMessage()]);
}
?>