<?php

namespace App\Http\Controllers\Api;

use App\Http\Controllers\Controller;
use App\Http\Requests\Api\MediaDownloadRequest;
use App\Models\MediaItem;
use Illuminate\Http\JsonResponse;
use Symfony\Component\HttpFoundation\BinaryFileResponse;

class MediaDownloadController extends Controller
{
    /**
     * Download a media item by its slug (filename).
     *
     * @param MediaDownloadRequest $request
     * @return JsonResponse|BinaryFileResponse
     */
    public function download(MediaDownloadRequest $request)
    {
        $data = $request->validated();
        $slug = $data['slug'];

        // Find the media item by filename (slug)
        $mediaItem = MediaItem::where('filename', $slug)->first();

        if (!$mediaItem) {
            return response()->json(['error' => 'Media not found'], 404);
        }

        // Build the file path
        $filePath = storage_path('app/public/uploads/media/' . $mediaItem->filename);

        if (!file_exists($filePath)) {
            return response()->json(['error' => 'File not found'], 404);
        }

        // Get the original filename for download
        $downloadName = $mediaItem->original_name ?? $mediaItem->filename;

        // Return the file as a download
        return response()->download($filePath, $downloadName, [
            'Access-Control-Allow-Origin' => '*',
            'Access-Control-Allow-Methods' => 'GET',
        ]);
    }
}
