<?php

namespace App\Support;

use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;

class UploadStream
{
    /**
     * Store an uploaded file without loading it fully into memory.
     */
    public static function putUploadedFile(string $disk, string $path, UploadedFile $file): bool
    {
        $sourcePath = $file->getRealPath() ?: $file->getPathname();
        if (! $sourcePath) {
            return false;
        }

        $stream = fopen($sourcePath, 'rb');

        if (! $stream) {
            return false;
        }

        try {
            return Storage::disk($disk)->put($path, $stream);
        } finally {
            if (is_resource($stream)) {
                fclose($stream);
            }
        }
    }
}
