<?php

namespace App\Modules\DefinedService\DefinedService\Application\Insert;

use App\Modules\DefinedService\CategoryDefinedService\Domain\IdCategoryDefinedService;
use App\Modules\DefinedService\DefinedService\Domain\IdDefinedService;
use App\Modules\DefinedService\DefinedService\Domain\DefinedServiceDate;
use App\Modules\DefinedService\DefinedService\Domain\DefinedServiceDateUpdate;
use App\Modules\DefinedService\DefinedService\Domain\DefinedServiceName;
use App\Modules\DefinedService\DefinedService\Domain\DefinedServiceStatus;
use App\Modules\DefinedService\DefinedService\Domain\DefinedServiceVersion;
use App\Modules\DefinedService\Route\Domain\IdRoute;
use App\Modules\DefinedService\TypeDefinedService\Domain\IdTypeDefinedService;
use App\Modules\Shared\Domain\Bus\Query\QueryHandler;
use App\Modules\Tour\Domain\IdTour;
use App\Modules\TypeProvider\Domain\IdTypeProvider;

final class InsertDefinedServiceQueryHandler implements QueryHandler
{
    public function __construct(private DefinedServiceInserter $inserter) {}

    public function __invoke(InsertDefinedServiceQuery $query): InsertDefinedServiceResponse
    {
        return new InsertDefinedServiceResponse($this->inserter->__invoke(
            new IdDefinedService(0),
            new DefinedServiceDate($query->date()),
            new DefinedServiceDateUpdate($query->dateUpdate()),
            new DefinedServiceName($query->name()),
            new DefinedServiceVersion(1),
            new DefinedServiceStatus($query->status()),
            new IdTypeProvider($query->idTypeProvider()),
            new IdCategoryDefinedService($query->idCategoryDefinedService()),
            new IdTypeDefinedService($query->idTypeDefinedService()),
            new IdRoute($query->idRoute()),
            new IdTour($query->idTour()),
            $query->idAdmin()
        ));
    }
}
