<?php

namespace App\Helpers;

use Illuminate\Support\Facades\Storage;
use Illuminate\Http\Response;
use Illuminate\Http\RedirectResponse;
use Symfony\Component\HttpFoundation\BinaryFileResponse;
use Symfony\Component\HttpFoundation\StreamedResponse;
class StorageHelper
{
    public static function downloader($filename, $disk = 'default') : BinaryFileResponse | RedirectResponse | StreamedResponse
    {
        if ($disk == 'default') {
            $disk = config('filesystems.default');
        }
        switch (config("filesystems.disks.$disk.driver")) {
            case 'local':
                return response()->download(Storage::disk($disk)->path($filename)); //works for PRIVATE or public?!

            case 's3':
                return redirect()->away(Storage::disk($disk)->temporaryUrl($filename, now()->addMinutes(5))); //works for private or public, I guess?

            default:
                return Storage::disk($disk)->download($filename);
        }
    }


    /**
     * This determines the file types that should be allowed inline and checks their fileinfo extension
     *
     * @author <A. Gianotto> [<snipe@snipe.net]>
     * @since v7.0.14
     * @param $file_with_path
     * @return bool
     */
    public static function allowSafeInline($file_with_path) {

        $allowed_inline = [
            'pdf',
            'svg',
            'jpg',
            'gif',
            'svg',
            'avif',
            'webp',
            'png',
        ];

        if (in_array(pathinfo($file_with_path, PATHINFO_EXTENSION), $allowed_inline)) {
            return true;
        }

        return false;

    }
}