<?php

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

use App\Modules\DefinedService\CategoryDefinedService\Application\CategoryDefinedServiceResponse;
use App\Modules\DefinedService\CategoryDefinedService\Application\CategoryDefinedServiceResponses;
use App\Modules\DefinedService\CategoryDefinedService\Domain\CategoryDefinedService;
use App\Modules\Shared\Domain\Bus\Query\QueryHandler;
use App\Modules\TypeProvider\Domain\IdTypeProvider;

final class ListCategoryDefinedServiceQueryHandler implements QueryHandler
{
    public function __construct(private CategoryDefinedServiceLister $lister) {}

    public function __invoke(ListCategoryDefinedServiceQuery $query): CategoryDefinedServiceResponses
    {
        return new CategoryDefinedServiceResponses(...array_map(
            fn(CategoryDefinedService $index) => new CategoryDefinedServiceResponse(
                $index->id()->value(),
                $index->date()->value(),
                $index->dateUpdate()->value(),
                $index->name()->value(),
                $index->code()->value(),
                $index->version()->value(),
                $index->status()->value(),
                $index->idTypeProvider()->value()
            ),
            $this->lister->__invoke(new IdTypeProvider($query->idTypeProvider()), $query->action())
        ));
    }
}
