<?php
/**
 * Upload API Endpoint
 * POST: Accept FormData image, validate type/size (max 10MB), save to public/uploads/
 *      Return {success, imageUrl, fileName, size}
 */

header('Content-Type: application/json; charset=utf-8');

$method = $_SERVER['REQUEST_METHOD'];

if ($method !== 'POST') {
    http_response_code(405);
    echo json_encode(['error' => 'طريقة الطلب غير مدعومة']);
    exit;
}

try {
    if (!isset($_FILES['image']) || $_FILES['image']['error'] !== UPLOAD_ERR_OK) {
        $errorCode = $_FILES['image']['error'] ?? UPLOAD_ERR_NO_FILE;
        $errorMsg = 'لم يتم إرسال صورة';
        if ($errorCode === UPLOAD_ERR_INI_SIZE || $errorCode === UPLOAD_ERR_FORM_SIZE) {
            $errorMsg = 'حجم الصورة كبير جداً. الحد الأقصى 10 ميجا';
        }
        http_response_code(400);
        echo json_encode(['error' => $errorMsg]);
        exit;
    }

    $file = $_FILES['image'];
    $finfo = new finfo(FILEINFO_MIME_TYPE);
    $mimeType = $finfo->file($file['tmp_name']);

    $allowedTypes = defined('ALLOWED_IMAGE_TYPES') ? ALLOWED_IMAGE_TYPES : ['image/png', 'image/jpeg', 'image/webp'];
    if (!in_array($mimeType, $allowedTypes)) {
        http_response_code(400);
        echo json_encode(['error' => 'نوع الملف غير مدعوم. استخدم PNG أو JPG أو WEBP']);
        exit;
    }

    $maxSize = defined('MAX_UPLOAD_SIZE') ? MAX_UPLOAD_SIZE : (10 * 1024 * 1024);
    if ($file['size'] > $maxSize) {
        http_response_code(400);
        echo json_encode(['error' => 'حجم الصورة كبير جداً. الحد الأقصى 10 ميجا']);
        exit;
    }

    // Determine extension
    $ext = 'jpg';
    if ($mimeType === 'image/png') $ext = 'png';
    elseif ($mimeType === 'image/webp') $ext = 'webp';

    $baseDir = dirname(__DIR__);
    $uploadDir = $baseDir . '/public/uploads';
    if (!is_dir($uploadDir)) {
        mkdir($uploadDir, 0755, true);
    }

    // Generate random filename to avoid collisions
    $randomName = bin2hex(random_bytes(8));
    $filename = 'upload_' . $randomName . '.' . $ext;
    $destPath = $uploadDir . '/' . $filename;

    if (!move_uploaded_file($file['tmp_name'], $destPath)) {
        http_response_code(500);
        echo json_encode(['error' => 'فشل حفظ الصورة']);
        exit;
    }

    $imageUrl = '/uploads/' . $filename;
    $originalName = $file['name'] ?? $filename;

    echo json_encode([
        'success'  => true,
        'imageUrl' => $imageUrl,
        'fileName' => $originalName,
        'size'     => $file['size'],
    ]);
} catch (Exception $e) {
    http_response_code(500);
    echo json_encode(['error' => 'خطأ في رفع الصورة']);
}