<?php

namespace App\Modules\DefinedService\CategoryDefinedService\Application\Update;

use App\Modules\DefinedService\CategoryDefinedService\Domain\IdCategoryDefinedService;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedServiceCode;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedServiceName;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedServiceOrder;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedServiceStatus;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedServiceVersion;
use App\Modules\Shared\Domain\Bus\Query\QueryHandler;

final class UpdateCategoryDefinedServiceQueryHandler implements QueryHandler
{
    public function __construct(private CategoryDefinedServiceUpdater $updater) {}

    public function __invoke(UpdateCategoryDefinedServiceQuery $query): UpdateCategoryDefinedServiceResponse
    {
        $this->updater->__invoke(
            new IdCategoryDefinedService($query->id()),
            new CategoryDefinedServiceName($query->name()),
            new CategoryDefinedServiceCode($query->code()),
            new CategoryDefinedServiceOrder($query->order()),
            new CategoryDefinedServiceVersion($query->version()),
            new CategoryDefinedServiceStatus($query->status()),
            $query->idAdmin()
        );
        return new UpdateCategoryDefinedServiceResponse();
    }
}
