<?php

namespace App\Actions\Database;

use App\Models\Server;
use App\Models\Service;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\ValidationException;

class InstallPHPMyAdmin
{
    /**
     * @throws ValidationException
     */
    public function install(Server $server, array $input): Service
    {
        $this->validate($input);

        $phpMyAdmin = $server->defaultService('phpmyadmin');
        if ($phpMyAdmin) {
            if ($phpMyAdmin->status === 'ready') {
                throw ValidationException::withMessages([
                    'install' => __('Already installed'),
                ])->errorBag('installPHPMyAdmin');
            }
            $phpMyAdmin->delete();
        }
        $phpMyAdmin = new Service([
            'server_id' => $server->id,
            'type' => 'phpmyadmin',
            'type_data' => [
                'allowed_ip' => $input['allowed_ip'],
                'php' => $server->defaultService('php')->version,
            ],
            'name' => 'phpmyadmin',
            'version' => '5.1.2',
            'status' => 'installing',
            'is_default' => 1,
        ]);
        $phpMyAdmin->save();
        $phpMyAdmin->install();

        return $phpMyAdmin;
    }

    /**
     * @throws ValidationException
     */
    private function validate(array $input): void
    {
        Validator::make($input, [
            'allowed_ip' => 'required',
        ])->validateWithBag('installPHPMyAdmin');
    }
}