<?php

namespace App\Initialize\Actions;

use Illuminate\Http\JsonResponse;
use Illuminate\Support\Collection;
use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction;
use Zoomyboy\LaravelNami\Data\SearchLayerOption;
use Zoomyboy\LaravelNami\Enum\SearchLayer;
use Zoomyboy\LaravelNami\Nami;

class NamiGetSearchLayerAction
{
    use AsAction;

    /**
     * @param array<string, mixed> $input
     *
     * @return Collection<int, SearchLayerOption>
     */
    public function handle(array $input): Collection
    {
        return Nami::login((int) $input['mglnr'], $input['password'])->searchLayerOptions(
            SearchLayer::from($input['layer'] ?: 0),
            $input['parent'] ?: null
        );
    }

    /**
     * @return array<string, string>
     */
    public function rules(): array
    {
        return [
            'mglnr' => 'required|numeric|min:0',
            'password' => 'required|string',
            'parent' => 'present',
            'layer' => 'required|numeric',
        ];
    }

    public function asController(ActionRequest $request): JsonResponse
    {
        $response = $this->handle($request->validated());

        return response()->json($response);
    }
}