<?php

namespace App\Http\Controllers;

use App\Actions\SshKey\CreateSshKey;
use App\Actions\SshKey\DeleteKeyFromServer;
use App\Actions\SshKey\DeployKeyToServer;
use App\Facades\Toast;
use App\Helpers\HtmxResponse;
use App\Models\Server;
use App\Models\SshKey;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

class SSHKeyController extends Controller
{
    public function index(Server $server): View
    {
        $this->authorize('manage', $server);

        return view('server-ssh-keys.index', [
            'server' => $server,
            'keys' => $server->sshKeys,
        ]);
    }

    public function store(Server $server, Request $request): HtmxResponse
    {
        $this->authorize('manage', $server);

        /** @var \App\Models\SshKey $key */
        $key = app(CreateSshKey::class)->create(
            $request->user(),
            $request->input()
        );

        $request->merge(['key_id' => $key->id]);

        return $this->deploy($server, $request);
    }

    public function destroy(Server $server, SshKey $sshKey): RedirectResponse
    {
        $this->authorize('manage', $server);

        app(DeleteKeyFromServer::class)->delete($server, $sshKey);

        Toast::success('SSH Key has been deleted.');

        return back();
    }

    public function deploy(Server $server, Request $request): HtmxResponse
    {
        $this->authorize('manage', $server);

        app(DeployKeyToServer::class)->deploy(
            $request->user(),
            $server,
            $request->input()
        );

        Toast::success('SSH Key has been deployed to the server.');

        return htmx()->back();
    }
}