<?php
require_once __DIR__ . '/../includes/config.php';

// Check if logged in
if (!isLoggedIn()) {
    handleError('Trebuie să fii logat', 401);
}

$user = getCurrentUser();
if (!$user) {
    handleError('Utilizator nu găsit', 401);
}

// Get data
$product_id = $_POST['product_id'] ?? null;

if (!$product_id || !is_numeric($product_id)) {
    handleError('ID produs invalid');
}

// Check if file was uploaded
if (!isset($_FILES['image']) || $_FILES['image']['error'] !== UPLOAD_ERR_OK) {
    $error_msg = 'Eroare la upload fișier';
    if (isset($_FILES['image']['error'])) {
        $error_codes = [
            UPLOAD_ERR_INI_SIZE => 'Fișierul depășește max_upload_size_mb',
            UPLOAD_ERR_FORM_SIZE => 'Fișierul depășește max_file_size din form',
            UPLOAD_ERR_PARTIAL => 'Fișierul a fost încărcat parțial',
            UPLOAD_ERR_NO_FILE => 'Niciun fișier selectat',
            UPLOAD_ERR_NO_TMP_DIR => 'Folder temp lipsă',
            UPLOAD_ERR_CANT_WRITE => 'Nu se poate scrie pe disk',
        ];
        $error_msg = $error_codes[$_FILES['image']['error']] ?? 'Eroare necunoscută';
    }
    handleError($error_msg);
}

$file = $_FILES['image'];
$allowed_types = ['image/jpeg', 'image/png', 'image/webp', 'image/gif'];
$max_size = 5 * 1024 * 1024; // 5MB

// Validation
if (!in_array($file['type'], $allowed_types)) {
    handleError('Format fișier invalid. Acceptate: JPG, PNG, WebP, GIF. Tip detectat: ' . $file['type']);
}

if ($file['size'] > $max_size) {
    handleError('Fișierul e prea mare. Maxim 5MB, detected: ' . round($file['size'] / 1024 / 1024, 2) . 'MB');
}

// Check if product exists
$product_id = (int)$product_id;
$result = $db->query("SELECT id, image_path FROM products WHERE id = $product_id LIMIT 1");
if (!$result || $result->num_rows === 0) {
    handleError('Produsul nu există');
}

$product = $result->fetch_assoc();

// Create uploads directory if not exists
$upload_path = UPLOAD_DIR;
if (!is_dir($upload_path)) {
    if (!mkdir($upload_path, 0755, true)) {
        handleError('Nu se poate crea directorul de upload');
    }
}

// Check if directory is writable
if (!is_writable($upload_path)) {
    handleError('Directorul de upload nu are permisiuni de scriere');
}

// Generate unique filename
$ext = strtolower(pathinfo($file['name'], PATHINFO_EXTENSION));
$filename = 'product_' . $product_id . '_' . time() . '.' . $ext;
$filepath = $upload_path . $filename;

// Delete old image if exists
if (!empty($product['image_path'])) {
    $old_path = $upload_path . $product['image_path'];
    if (file_exists($old_path)) {
        @unlink($old_path);
    }
}

// Move uploaded file
if (!move_uploaded_file($file['tmp_name'], $filepath)) {
    handleError('Eroare la salvarea fișierului. Verifică permisiuni: ' . $filepath);
}

// Update product
$filename_escaped = escape($filename);
$update_query = "UPDATE products SET image_path = '$filename_escaped' WHERE id = $product_id";

if ($db->query($update_query)) {
    handleSuccess([
        'image_path' => $filename,
        'image_url' => APP_URL . '/uploads/' . $filename
    ], 'Imagine încărcată');
} else {
    @unlink($filepath);
    handleError('Eroare la actualizarea produsului: ' . $db->error);
}
?>
?>
