<?php

namespace App\Http\Controllers;

use App\Actions\Server\CreateServerLog;
use App\Facades\Toast;
use App\Models\Server;
use App\Models\ServerLog;
use Illuminate\Contracts\View\View;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;

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

        return view('server-logs.index', [
            'server' => $server,
            'pageTitle' => __('Vito Logs'),
        ]);
    }

    public function show(Server $server, ServerLog $serverLog): RedirectResponse
    {
        $this->authorize('manage', $server);

        if ($server->id != $serverLog->server_id) {
            abort(404);
        }

        return back()->with([
            'content' => $serverLog->getContent(),
        ]);
    }

    public function remote(Server $server): View
    {
        $this->authorize('manage', $server);

        return view('server-logs.remote-logs', [
            'server' => $server,
            'remote' => true,
            'pageTitle' => __('Remote Logs'),
        ]);
    }

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

        app(CreateServerLog::class)->create($server, $request->input());

        Toast::success('Log added successfully.');

        return htmx()->redirect(route('servers.logs.remote', ['server' => $server]));
    }

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

        $serverLog->delete();

        Toast::success('Remote log deleted successfully.');

        return redirect()->route('servers.logs.remote', ['server' => $server]);
    }
}