<?php
require_once __DIR__ . '/../config/bootstrap.php';
admin_require_login();
require_method('POST');

$pdo = db();
if (!isset($_FILES['file'])) {
  json_response(['ok'=>false,'error'=>'Arquivo não enviado.'], 422);
}

$f = $_FILES['file'];
if (($f['error'] ?? UPLOAD_ERR_OK) !== UPLOAD_ERR_OK) {
  json_response(['ok'=>false,'error'=>'Falha no upload.'], 400);
}

$max = 10 * 1024 * 1024;
if (($f['size'] ?? 0) > $max) {
  json_response(['ok'=>false,'error'=>'Arquivo acima de 10MB.'], 422);
}

$original = $f['name'] ?? 'asset';
$tmp = $f['tmp_name'];
$mime = mime_content_type($tmp) ?: '';

$allowed = [
  'image/jpeg' => 'jpg',
  'image/png' => 'png',
  'image/webp' => 'webp',
  'image/bmp' => 'bmp',
];
if (!isset($allowed[$mime])) {
  // fallback por extensão
  $ext = strtolower(pathinfo($original, PATHINFO_EXTENSION));
  if (!in_array($ext, ['jpg','jpeg','png','webp','bmp'], true)) {
    json_response(['ok'=>false,'error'=>'Formato não permitido. Use JPG/PNG/WEBP/BMP.'], 422);
  }
  $ext = ($ext === 'jpeg') ? 'jpg' : $ext;
} else {
  $ext = $allowed[$mime];
}

ensure_dir(__DIR__ . '/../storage/assets');
$base = safe_filename(pathinfo($original, PATHINFO_FILENAME));
$fname = $base . '-' . date('YmdHis') . '-' . uuid16() . '.' . $ext;
$rel = '/storage/assets/' . $fname;
$dest = __DIR__ . '/..' . $rel;

if (!move_uploaded_file($tmp, $dest)) {
  json_response(['ok'=>false,'error'=>'Não foi possível salvar o arquivo.'], 500);
}

$st = $pdo->prepare('INSERT INTO assets (tipo, arquivo, original_name, mime, size_bytes, created_at) VALUES (?,?,?,?,?,NOW())');
$st->execute(['image', $rel, $original, $mime, (int)($f['size'] ?? 0)]);
$id = (int)$pdo->lastInsertId();

json_response(["ok"=>true,"asset"=>["id"=>$id,"arquivo"=>$rel,"url"=>build_url_path($rel)]]);
