<?php

namespace App\Services;

use App\Enums\ProcessStatus;
use App\Jobs\ExecuteCoolifyProcess;
use Spatie\Activitylog\Contracts\Activity;

class CoolifyProcess
{
    protected Activity $activity;

    // TODO Left 'root' as default user instead of 'coolify' because
    //      there's a task at TODO.md to run docker without sudo
    public function __construct(
        protected string    $destination,
        protected string    $command,
        protected ?int      $port = 22,
        protected ?string   $user = 'root',
    ){
        $this->activity = activity()
            ->withProperties([
                'type' => 'COOLIFY_PROCESS',
                'user' => $this->user,
                'destination' => $this->destination,
                'port' => $this->port,
                'command' => $this->command,
                'status' => ProcessStatus::HOLDING,
            ])
            ->log("Awaiting command to start...\n\n");
    }

    public function __invoke(): Activity
    {
        $job = new ExecuteCoolifyProcess($this->activity);

        dispatch($job);

        $this->activity->refresh();

        ray($this->activity->id);

        return $this->activity;
    }

}