<?php

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

use App\Modules\DefinedService\TypeDefinedService\Application\TypeDefinedServiceResponse;
use App\Modules\DefinedService\TypeDefinedService\Application\TypeDefinedServiceResponses;
use App\Modules\DefinedService\TypeDefinedService\Domain\TypeDefinedService;
use App\Modules\Shared\Domain\Bus\Query\QueryHandler;
use App\Modules\TypeProvider\Domain\IdTypeProvider;

final class ListTypeDefinedServiceQueryHandler implements QueryHandler
{
    public function __construct(private TypeDefinedServiceLister $lister) {}

    public function __invoke(ListTypeDefinedServiceQuery $query): TypeDefinedServiceResponses
    {
        return new TypeDefinedServiceResponses(...array_map(
            fn(TypeDefinedService $index) => new TypeDefinedServiceResponse(
                $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())
        ));
    }
}
