<?php

namespace App\SSH\Systemd;

use App\Exceptions\SSHError;
use App\Models\Server;

class Systemd
{
    public function __construct(protected Server $server) {}

    /**
     * @throws SSHError
     */
    public function status(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('status-%s', $unit));
    }

    /**
     * @throws SSHError
     */
    public function start(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl start $unit
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('start-%s', $unit));
    }

    /**
     * @throws SSHError
     */
    public function stop(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl stop $unit
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('stop-%s', $unit));
    }

    /**
     * @throws SSHError
     */
    public function restart(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl restart $unit
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('restart-%s', $unit));
    }

    /**
     * @throws SSHError
     */
    public function enable(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl start $unit
            sudo systemctl enable $unit
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('enable-%s', $unit));
    }

    /**
     * @throws SSHError
     */
    public function disable(string $unit): string
    {
        $command = <<<EOD
            sudo systemctl stop $unit
            sudo systemctl disable $unit
            sudo systemctl status $unit | cat
        EOD;

        return $this->server->ssh()->exec($command, sprintf('disable-%s', $unit));
    }
}