<?php

namespace App\Actions\SshKey;

use App\Enums\SshKeyStatus;
use App\Models\Server;
use App\Models\SshKey;
use App\Models\User;
use Illuminate\Support\Facades\Validator;
use Illuminate\Validation\Rule;

class DeployKeyToServer
{
    public function deploy(User $user, Server $server, array $input): void
    {
        $this->validate($user, $input);

        /** @var SshKey $sshKey */
        $sshKey = SshKey::findOrFail($input['key_id']);
        $server->sshKeys()->attach($sshKey, [
            'status' => SshKeyStatus::ADDING,
        ]);
        $server->os()->deploySSHKey($sshKey->public_key);
        $sshKey->servers()->updateExistingPivot($server->id, [
            'status' => SshKeyStatus::ADDED,
        ]);
    }

    private function validate(User $user, array $input): void
    {
        Validator::make($input, [
            'key_id' => [
                'required',
                Rule::exists('ssh_keys', 'id')->where('user_id', $user->id),
            ],
        ])->validate();
    }
}