<?php

namespace App\Modules\Tour\Application\Find;

use App\Modules\Tour\Domain\IdTour;
use App\Modules\Shared\Domain\Bus\Query\QueryHandler;

final class FindTourQueryHandler implements QueryHandler
{
    public function __construct(private TourFinder $finder) {}

    public function __invoke(FindTourQuery $query): FindTourResponse
    {
        $model = $this->finder->__invoke(new IdTour($query->getId()), $query->avoidTransaction(), $query->lockInShare());
        return new FindTourResponse(
            $model->id()->value(),
            $model->code()->value(),
            $model->name()->value(),
            $model->urlThumbnail()->value(),
            $model->duration()->value(),
            $model->minPax()->value(),
            $model->availability()->value(),
            $model->availabilityStatus()->value(),
            $model->anticipation()->value(),
            $model->anticipationType()->value(),
            $model->color()->value(),
            $model->score()->value(),
            $model->scoreCant()->value(),
            $model->scoreTotal()->value(),
            $model->status()->value(),

            $model->briefingDaysBefore()->value(),
            $model->briefingTime()->value(),
            $model->briefingText()->value(),
            $model->briefingUseCredential()->value(),


            $model->idCategoryTour()->value(),
            $model->idTypeTour()->value(),
            $model->idCountry()->value(),
            $model->idState()->value(),
            $model->idCity()->value(),
            $model->idTourTemplate()->value(),
            $model->idTourTemplateBlank()->value(),
        );
    }
}
