<?php
header('Content-Type: application/json');

if (!isset($_FILES['file']) || !isset($_POST['color_id'])) {
    echo json_encode(['status' => 'error', 'message' => 'Datos incompletos']);
    exit;
}

$file = $_FILES['file'];
$color_id = $_POST['color_id'];
$uploadDir = '../img/productos/';

// Validar archivo
if ($file['error'] !== UPLOAD_ERR_OK) {
    echo json_encode(['status' => 'error', 'message' => 'Error al subir el archivo']);
    exit;
}

// Validar tipo de archivo
$allowedTypes = ['image/jpeg', 'image/png', 'image/gif', 'image/webp'];
if (!in_array($file['type'], $allowedTypes)) {
    echo json_encode(['status' => 'error', 'message' => 'Solo se permiten imágenes (JPEG, PNG, GIF, WebP)']);
    exit;
}

// Validar tamaño (max 2MB)
if ($file['size'] > 2 * 1024 * 1024) {
    echo json_encode(['status' => 'error', 'message' => 'El archivo es demasiado grande. Máximo 2MB']);
    exit;
}

// Generar nombre único
$extension = pathinfo($file['name'], PATHINFO_EXTENSION);
$fileName = 'color_' . $color_id . '_' . time() . '_' . rand(1000, 9999) . '.' . $extension;
$filePath = $uploadDir . $fileName;

// Crear directorio si no existe
if (!is_dir($uploadDir)) {
    mkdir($uploadDir, 0777, true);
}

// Mover archivo
if (move_uploaded_file($file['tmp_name'], $filePath)) {
    // Crear imagen preview (32x32)
    $previewName = 'preview_' . $fileName;
    $previewPath = $uploadDir . $previewName;
    
    if (createPreviewImage($filePath, $previewPath, 32, 32)) {
        echo json_encode([
            'status' => 'success',
            'message' => 'Imagen subida correctamente',
            'filename' => $fileName,
            'preview' => $previewName,
            'color_id' => $color_id
        ]);
    } else {
        echo json_encode([
            'status' => 'success',
            'message' => 'Imagen subida correctamente (sin preview)',
            'filename' => $fileName,
            'preview' => null,
            'color_id' => $color_id
        ]);
    }
} else {
    echo json_encode(['status' => 'error', 'message' => 'Error al guardar el archivo']);
}

function createPreviewImage($source, $destination, $width, $height) {
    $imageInfo = getimagesize($source);
    if (!$imageInfo) return false;
    
    $sourceWidth = $imageInfo[0];
    $sourceHeight = $imageInfo[1];
    $sourceType = $imageInfo[2];
    
    // Crear imagen desde el archivo fuente
    switch ($sourceType) {
        case IMAGETYPE_JPEG:
            $sourceImage = imagecreatefromjpeg($source);
            break;
        case IMAGETYPE_PNG:
            $sourceImage = imagecreatefrompng($source);
            break;
        case IMAGETYPE_GIF:
            $sourceImage = imagecreatefromgif($source);
            break;
        case IMAGETYPE_WEBP:
            $sourceImage = imagecreatefromwebp($source);
            break;
        default:
            return false;
    }
    
    if (!$sourceImage) return false;
    
    // Crear imagen destino
    $destImage = imagecreatetruecolor($width, $height);
    
    // Mantener transparencia para PNG
    if ($sourceType == IMAGETYPE_PNG) {
        imagealphablending($destImage, false);
        imagesavealpha($destImage, true);
        $transparent = imagecolorallocatealpha($destImage, 255, 255, 255, 127);
        imagefill($destImage, 0, 0, $transparent);
    }
    
    // Redimensionar
    imagecopyresampled($destImage, $sourceImage, 0, 0, 0, 0, $width, $height, $sourceWidth, $sourceHeight);
    
    // Guardar imagen
    $result = false;
    switch ($sourceType) {
        case IMAGETYPE_JPEG:
            $result = imagejpeg($destImage, $destination, 90);
            break;
        case IMAGETYPE_PNG:
            $result = imagepng($destImage, $destination);
            break;
        case IMAGETYPE_GIF:
            $result = imagegif($destImage, $destination);
            break;
        case IMAGETYPE_WEBP:
            $result = imagewebp($destImage, $destination);
            break;
    }
    
    // Limpiar memoria
    imagedestroy($sourceImage);
    imagedestroy($destImage);
    
    return $result;
}
?>