<?php

namespace App\Http\Controllers\Api\Admin;

use App\Http\Controllers\Controller;
use App\Support\Media;
use Illuminate\Http\Request;

/**
 * Admin panelde tek görsel alanları (kategori/blog/ekip) için jenerik görsel yükleme.
 * Dosyayı public diske kaydeder ve tam URL döndürür; ilgili CRUD bu URL'i image/cover_image
 * string alanında saklar (dış URL yerine kendi barındırdığımız görsel).
 */
class UploadController extends Controller
{
    /** Klasör → o klasöre yükleme için gereken izin. */
    private const FOLDER_PERMISSIONS = [
        'categories' => 'category.manage',
        'blog' => 'blog.manage',
        'team' => 'team.manage',
        // Agency Panel: firma logo/kapak görselleri (firma sahibi yükler).
        'companies' => 'company.manage.own',
    ];

    public function store(Request $request)
    {
        $data = $request->validate([
            'image' => ['required', 'image', 'mimes:jpeg,jpg,png,webp', 'max:5120'], // 5MB
            'folder' => ['required', 'string', 'in:categories,blog,team,companies'],
        ]);

        $folder = $data['folder'];
        abort_unless(
            $request->user()->hasPermission(self::FOLDER_PERMISSIONS[$folder]),
            403,
            'Bu görseli yüklemek için yetkiniz yok.'
        );

        // Disk MEDIA_DISK env'inden gelir (canlı: r2, dev: public olabilir).
        $path = $request->file('image')->store("uploads/{$folder}", Media::disk());
        $url = Media::url($request, $path);

        return response()->json([
            'data' => [
                'path' => $path,
                'url' => $url,
            ],
        ], 201);
    }
}
