<?php

namespace App\Jobs\Installation;

use App\Jobs\Job;
use App\Models\FirewallRule;
use App\Models\Service;
use App\SSHCommands\PHPMyAdmin\DeleteNginxPHPMyAdminVHostCommand;
use Exception;
use Throwable;

class UninstallPHPMyAdmin extends Job
{
    protected Service $service;

    public function __construct(Service $service)
    {
        $this->service = $service;
    }

    /**
     * @throws Exception
     * @throws Throwable
     */
    public function handle(): void
    {
        $this->removeFirewallRule();
        $this->deleteVHost();
        $this->restartPHP();
    }

    /**
     * @throws Exception
     */
    private function removeFirewallRule(): void
    {
        /** @var ?FirewallRule $rule */
        $rule = FirewallRule::query()
            ->where('server_id', $this->service->server_id)
            ->where('port', $this->service->type_data['port'])
            ->first();
        $rule?->removeFromServer();
    }

    /**
     * @throws Throwable
     */
    private function deleteVHost(): void
    {
        $this->service->server->ssh()->exec(
            new DeleteNginxPHPMyAdminVHostCommand('/home/vito/phpmyadmin'),
            'delete-phpmyadmin-vhost'
        );
    }

    private function restartPHP(): void
    {
        $this->service->server->service(
            'php',
            $this->service->type_data['php']
        )?->restart();
    }
}
