<?php
/**
 * Heritage Voice — partner_upload.php
 * POST /api/partner-upload
 * Upload ảnh cho đối tác (chủ cơ sở hoặc admin)
 */
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/db.php';
require_once __DIR__ . '/helpers.php';

function partner_upload() {

// Auth
$uid = get_token_uid();
if (!$uid) json_error('Unauthorized', 401);

$uuid = trim($_POST['uuid'] ?? '');
if (!$uuid) json_error('Thiếu uuid');

// Kiểm tra quyền: admin hoặc chủ cơ sở
$role = current_user_role();
if (!in_array($role, ['admin','superadmin','editor'])) {
    $ck = db()->prepare("SELECT id FROM hv_partners WHERE uuid = :uuid AND user_id = :uid");
    $ck->execute([':uuid' => $uuid, ':uid' => $uid]);
    if (!$ck->fetch()) json_error('Forbidden', 403);
}

// Kiểm tra file
if (empty($_FILES['image'])) json_error('Không có file');
$file  = $_FILES['image'];
if ($file['error'] !== UPLOAD_ERR_OK) json_error('Lỗi upload: ' . $file['error']);

// Validate
$maxSize  = 2 * 1024 * 1024; // 2MB
$allowed  = ['image/jpeg','image/jpg','image/png','image/webp'];
$mimeType = mime_content_type($file['tmp_name']);

if ($file['size'] > $maxSize) json_error('File quá lớn, tối đa 2MB');
if (!in_array($mimeType, $allowed)) json_error('Chỉ chấp nhận JPG, PNG, WebP');

// Tên file & subfolder
$type      = $_POST['type'] ?? 'gallery';
$subFolder = match(true) {
    $type === 'cover'  => 'cover/',
    $type === 'menu'   => 'menu/',
    $type === 'room' || $type === 'rooms' => 'rooms/',
    default => 'gallery/',
};

// Tạo thư mục
$uploadDir = dirname(__DIR__) . '/uploads/partners/' . $uuid . '/' . $subFolder;
if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);

// Đếm số ảnh hiện có (chỉ giới hạn gallery)
$existing = glob($uploadDir . '*.{jpg,jpeg,png,webp}', GLOB_BRACE);
if ($type === 'gallery' && count($existing) >= 20) json_error('Tối đa 20 ảnh gallery');
$ext      = 'jpg'; // luôn save thành jpg
$filename = $type === 'cover' ? 'cover.jpg' : 'img_' . time() . '.jpg';
$savePath = $uploadDir . $filename;

// Resize bằng GD
$img = null;
if ($mimeType === 'image/png')  $img = imagecreatefrompng($file['tmp_name']);
if ($mimeType === 'image/webp') $img = imagecreatefromwebp($file['tmp_name']);
if (!$img) $img = imagecreatefromjpeg($file['tmp_name']);

if (!$img) json_error('Không thể xử lý ảnh');

// Resize về max 1200px
$origW = imagesx($img);
$origH = imagesy($img);
$maxW  = 1200;

if ($origW > $maxW) {
    $newW = $maxW;
    $newH = (int)($origH * $maxW / $origW);
    $resized = imagecreatetruecolor($newW, $newH);
    // Giữ transparency cho PNG
    imagealphablending($resized, false);
    imagesavealpha($resized, true);
    imagecopyresampled($resized, $img, 0, 0, 0, 0, $newW, $newH, $origW, $origH);
    imagedestroy($img);
    $img = $resized;
}

imagejpeg($img, $savePath, 85);
imagedestroy($img);

// URL công khai
$baseUrl = (isset($_SERVER['HTTPS']) ? 'https' : 'http') . '://' . $_SERVER['HTTP_HOST'];
    $fileUrl = $baseUrl . '/uploads/partners/' . $uuid . '/' . $subFolder . $filename;

// Cập nhật DB — lưu vào cột images (JSON array)
$ps = db()->prepare("SELECT images FROM hv_partners WHERE uuid = :uuid");
$ps->execute([':uuid' => $uuid]);
$row = $ps->fetch();
$images = $row['images'] ? json_decode($row['images'], true) : [];

if ($type === 'cover') {
    // Cover luôn là ảnh đầu tiên
    $images = array_filter($images, fn($img) => !str_contains($img, '/cover.jpg'));
    array_unshift($images, $fileUrl);
} else {
    // Xóa URL cũ nếu trùng filename
    $images = array_filter($images, fn($img) => !str_contains($img, $filename));
    $images[] = $fileUrl;
}

$images = array_values(array_unique($images));
db()->prepare("UPDATE hv_partners SET images = :img, updated_at = NOW() WHERE uuid = :uuid")
    ->execute([':img' => json_encode($images), ':uuid' => $uuid]);

json_ok(['url' => $fileUrl, 'images' => $images], 'Upload thành công');
}
