<?php
header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store, no-cache, must-revalidate, max-age=0');

function out($ok, $message, $path = '') {
    echo json_encode([
        'success' => $ok,
        'code' => $ok ? 1 : 0,
        'message' => $message,
        'response' => $path ?: $message,
        'path' => $path,
        'url' => $path
    ], JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
    exit;
}

if ($_SERVER['REQUEST_METHOD'] !== 'POST') out(false, 'Solicitud no válida.');
if (!isset($_FILES['imageFileField'])) out(false, 'No se recibió ninguna imagen.');

$file = $_FILES['imageFileField'];
if (!isset($file['error']) || $file['error'] !== UPLOAD_ERR_OK) {
    $errors = [
        UPLOAD_ERR_INI_SIZE => 'La imagen supera el límite del servidor.',
        UPLOAD_ERR_FORM_SIZE => 'La imagen supera el tamaño permitido.',
        UPLOAD_ERR_PARTIAL => 'La imagen se subió incompleta.',
        UPLOAD_ERR_NO_FILE => 'No seleccionaste ninguna imagen.',
        UPLOAD_ERR_NO_TMP_DIR => 'Falta la carpeta temporal del servidor.',
        UPLOAD_ERR_CANT_WRITE => 'El servidor no pudo guardar la imagen.'
    ];
    out(false, $errors[$file['error']] ?? 'Error al subir la imagen.');
}

$max = 8 * 1024 * 1024;
if (($file['size'] ?? 0) > $max) out(false, 'La imagen pesa más de 8 MB.');

$finfo = new finfo(FILEINFO_MIME_TYPE);
$mime = $finfo->file($file['tmp_name']);
$allowed = [
    'image/jpeg' => 'jpg',
    'image/png' => 'png',
    'image/webp' => 'webp'
];
if (!isset($allowed[$mime])) out(false, 'Solo se permiten imágenes JPG, PNG o WEBP.');

$targetDir = __DIR__ . '/elements/images/uploads';
if (!is_dir($targetDir) && !mkdir($targetDir, 0755, true)) out(false, 'No se pudo crear la carpeta de imágenes.');
if (!is_writable($targetDir)) out(false, 'La carpeta elements/images/uploads no tiene permisos de escritura.');

$base = pathinfo($file['name'] ?? 'imagen', PATHINFO_FILENAME);
$base = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $base) ?: 'imagen';
$base = strtolower(preg_replace('/[^a-zA-Z0-9_-]+/', '-', $base));
$base = trim($base, '-_') ?: 'imagen';
$name = 'share-' . $base . '-' . date('Ymd-His') . '-' . substr(bin2hex(random_bytes(3)), 0, 6) . '.' . $allowed[$mime];
$dest = $targetDir . '/' . $name;

if (!move_uploaded_file($file['tmp_name'], $dest)) out(false, 'No se pudo mover la imagen a la carpeta final.');
@chmod($dest, 0644);

$relative = 'elements/images/uploads/' . $name;
out(true, 'Imagen subida correctamente.', $relative);
