<?php

namespace App\ServerTypes;

use App\Contracts\ServerType;
use App\Events\Broadcast;
use App\Models\Server;
use Closure;

abstract class AbstractType implements ServerType
{
    protected Server $server;

    public function __construct(Server $server)
    {
        $this->server = $server;
    }

    protected function progress(int $percentage, string $step = null): Closure
    {
        return function () use ($percentage, $step) {
            $this->server->progress = $percentage;
            $this->server->progress_step = $step;
            $this->server->save();
            event(new Broadcast('server-installation-progress', [
                'server' => $this->server,
                'step' => $step,
                'percentage' => $percentage,
            ]));
        };
    }
}