<?php

namespace App\Maildispatcher\Actions;

use App\Maildispatcher\Models\Maildispatcher;
use Illuminate\Http\JsonResponse;
use Lorisleiva\Actions\ActionRequest;
use Lorisleiva\Actions\Concerns\AsAction;

class UpdateAction
{
    use AsAction;

    /**
     * @param array<string, mixed> $input
     */
    public function handle(Maildispatcher $maildispatcher, array $input): void
    {
        $maildispatcher->update([
            ...$input,
            'filter' => (object) $input['filter'],
        ]);
        ResyncAction::dispatch();
    }

    /**
     * @return array<string, string>
     */
    public function getValidationAttributes(): array
    {
        return [
            'gateway_id' => 'Verbindung',
        ];
    }

    /**
     * @return array<string, string>
     */
    public function rules(): array
    {
        return [
            'gateway_id' => 'required|exists:mailgateways,id',
            'name' => 'required|max:50',
            'filter' => 'present|array',
        ];
    }

    public function asController(Maildispatcher $maildispatcher, ActionRequest $request): JsonResponse
    {
        $this->handle($maildispatcher, $request->validated());

        return response()->json('', 201);
    }
}