<?php

namespace App\SiteTypes;

use App\Enums\SiteFeature;
use App\Jobs\Site\CreateVHost;
use Illuminate\Support\Facades\Bus;
use Illuminate\Validation\Rule;
use Throwable;

class PHPBlank extends PHPSite
{
    public function supportedFeatures(): array
    {
        return [
            SiteFeature::DEPLOYMENT,
            SiteFeature::ENV,
            SiteFeature::SSL,
            SiteFeature::QUEUES,
        ];
    }

    public function createValidationRules(array $input): array
    {
        return [
            'php_version' => [
                'required',
                Rule::in($this->site->server->installedPHPVersions()),
            ],
        ];
    }

    public function createFields(array $input): array
    {
        return [
            'web_directory' => $input['web_directory'] ?? '',
            'php_version' => $input['php_version'] ?? '',
        ];
    }

    public function data(array $input): array
    {
        return [];
    }

    public function install(): void
    {
        $chain = [
            new CreateVHost($this->site),
            $this->progress(65),
            function () {
                $this->site->php()?->restart();
            },
        ];

        $chain[] = function () {
            $this->site->installationFinished();
        };

        Bus::chain($chain)
            ->catch(function (Throwable $e) {
                $this->site->installationFailed($e);
            })
            ->onConnection('ssh-long')
            ->dispatch();
    }
}