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

// RUTA CORREGIDA: image_optimizer.php está en cms/
require_once('image_optimizer.php'); 
require_once('db_connection.php'); 

// DIRECTORIO BASE DE UPLOADS (lo necesitarás en la función de eliminación)
$uploadDirBase = '../uploads/hero/';
$uploadDirFull = '../' . $uploadDirBase; 

if (!is_dir($uploadDirFull)) {
    mkdir($uploadDirFull, 0777, true);
}

// Valores de entrada
$hero_title_1 = strip_tags(htmlspecialchars_decode($_POST['hero_title_1'] ?? ''));
$hero_title_2 = strip_tags(htmlspecialchars_decode($_POST['hero_title_2'] ?? ''));
$hero_description = strip_tags(htmlspecialchars_decode($_POST['hero_description'] ?? ''));


/**
 * Procesa la subida de archivo, optimiza y fuerza la conversi n a WebP.
 * @param string $fileInputName Nombre del campo en $_FILES.
 * @param string $baseUploadDir Ruta base para guardar en DB (ej: 'uploads/hero/').
 * @param bool $isBackground Indica si es una imagen de fondo (usa ancho mayor).
 * @return string|null La ruta relativa final para la DB (ej: 'uploads/hero/nombre.webp'), o null si no se subi un nuevo archivo.
 */
function handleOptimizedUpload($fileInputName, $baseUploadDir, $isBackground = false) {
    if (!isset($_FILES[$fileInputName]) || $_FILES[$fileInputName]['error'] !== UPLOAD_ERR_OK) {
        return null;
    }
    
    $file = $_FILES[$fileInputName];
    $tempPath = $file['tmp_name'];

    // *** REGLA DE RESOLUCIÓN ***
    $maxWidth = $isBackground ? 1920 : 1280;
    
    // Generar nombre de archivo con la extensi n FINAL .webp
    $fileName = uniqid($isBackground ? 'bg_img_' : 'main_img_') . '.webp';
    
    // Ruta completa para guardar la imagen optimizada
    $destinationPathFull = '../' . $baseUploadDir . $fileName;

    // Llama a la función de optimización (guarda como WebP)
    $success = optimizeAndSaveImage($tempPath, $destinationPathFull, $maxWidth);

    if (!$success) {
        throw new Exception("Error al optimizar la imagen '{$fileInputName}'. Método No Permitido");
    }
    
    // Devolvemos 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 (img/default-...).
 * @param string|null $dbPath La ruta guardada en la base de datos (ej: 'uploads/hero/nombre.webp').
 */
function deleteOldImage(?string $dbPath): void {
    if ($dbPath && !str_starts_with($dbPath, 'img/default-') && !str_starts_with($dbPath, 'https://')) {
        $fullPath = '../' . $dbPath;
        if (file_exists($fullPath) && is_writable($fullPath)) {
            unlink($fullPath);
            error_log("Old image deleted: " . $fullPath);
        }
    }
}

try {
    $pdo->beginTransaction();

    // 1. Obtener las rutas actuales antes de actualizarlas
    $stmt = $pdo->prepare("SELECT hero_bg_image, hero_main_image FROM cms_hero WHERE id = 1");
    $stmt->execute();
    $current_data = $stmt->fetch(PDO::FETCH_ASSOC);

    // 2. Procesar y obtener las nuevas rutas
    $new_bg_path = handleOptimizedUpload('hero_bg_image', $uploadDirBase, true);
    $bg_image_path = $new_bg_path ?? $current_data['hero_bg_image'];

    $new_main_path = handleOptimizedUpload('hero_main_image', $uploadDirBase, false);
    $main_image_path = $new_main_path ?? $current_data['hero_main_image'];
    
    // 3. Eliminar archivos antiguos si se subió uno nuevo
    if ($new_bg_path) {
        deleteOldImage($current_data['hero_bg_image']);
    }
    if ($new_main_path) {
        deleteOldImage($current_data['hero_main_image']);
    }

    // 4. Actualizar la BD
    $sql = "UPDATE cms_hero SET 
                hero_title_1 = ?, 
                hero_title_2 = ?, 
                hero_description = ?, 
                hero_bg_image = ?, 
                hero_main_image = ? 
            WHERE id = 1";
            
    $stmt = $pdo->prepare($sql);
    $stmt->execute([
        $hero_title_1, 
        $hero_title_2, 
        $hero_description, 
        $bg_image_path, 
        $main_image_path
    ]);

    $pdo->commit();

    // Devolvemos las nuevas rutas para el frontend
    echo json_encode([
        'success' => true, 
        'message' => 'SiteFlow Actualizado Exitosamente',
        'data' => [
            'hero_bg_image' => $bg_image_path,
            'hero_main_image' => $main_image_path
        ]
    ]);

} catch (Exception $e) {
    if ($pdo->inTransaction()) {
        $pdo->rollBack();
    }
    http_response_code(500);
    echo json_encode(['success' => false, 'message' => 'Error: ' . $e->getMessage()]);
}
?>