<?php

namespace App\Actions\Server;

use App\Enums\ServerStatus;
use App\Facades\Notifier;
use App\Models\Server;
use App\Notifications\ServerUpdateFailed;

class Update
{
    public function update(Server $server): void
    {
        $server->status = ServerStatus::UPDATING;
        $server->save();
        dispatch(function () use ($server): void {
            $server->os()->upgrade();
            $server->checkConnection();
            $server->checkForUpdates();
        })->catch(function () use ($server): void {
            Notifier::send($server, new ServerUpdateFailed($server));
            $server->checkConnection();
        })->onConnection('ssh');
    }
}