<?php

namespace App\Setting;

use App\Group;
use App\Initialize\Actions\NamiLoginCheckAction;
use App\Nami\Actions\SettingSaveAction;
use App\Setting\Contracts\Storeable;
use Lorisleiva\Actions\ActionRequest;
use Zoomyboy\LaravelNami\Api;
use Zoomyboy\LaravelNami\Nami;

class NamiSettings extends LocalSettings implements Storeable
{
    public int $mglnr;

    public string $password;

    public int $default_group_id;

    /** @var array<string, string> */
    public array $search_params;

    public static function group(): string
    {
        return 'nami';
    }

    public function login(): Api
    {
        return Nami::login($this->mglnr, $this->password);
    }

    /**
     * @inheritdoc
     */
    public function rules(): array
    {
        return [
            'mglnr' => 'required',
            'password' => 'required',
            'default_group_id' => 'required',
        ];
    }

    public function beforeSave(ActionRequest $request): void
    {
        NamiLoginCheckAction::run([
            'mglnr' => $request->mglnr,
            'password' => $request->password,
        ]);
    }

    public function localGroup(): ?Group
    {
        return Group::firstWhere('nami_id', $this->default_group_id);
    }

    public static function title(): string
    {
        return 'NaMi-Login';
    }

    /**
     * @inheritdoc
     */
    public function viewData(): array
    {
        return [
            'data' => [
                'mglnr' => $this->mglnr,
                'password' => '',
                'default_group_id' => $this->default_group_id,
            ]
        ];
    }
}