<?php

namespace App\Actions\Database;

use App\Enums\BackupFileStatus;
use App\Models\BackupFile;
use Illuminate\Support\Facades\Storage;
use Symfony\Component\HttpFoundation\StreamedResponse;
use Throwable;

class ManageBackupFile
{
    /**
     * @throws Throwable
     */
    public function download(BackupFile $file): StreamedResponse
    {
        $localFilename = "backup_{$file->id}_{$file->name}.zip";

        if (! Storage::disk('backups')->exists($localFilename)) {
            $file->backup->server->ssh()->download(
                Storage::disk('backups')->path($localFilename),
                $file->path()
            );
        }

        return Storage::disk('backups')->download($localFilename, $file->name.'.zip');
    }

    public function delete(BackupFile $file): void
    {
        $file->status = BackupFileStatus::DELETING;
        $file->save();

        dispatch(function () use ($file) {
            $file->deleteFile();
        });
    }
}