<?php

namespace App\Http\Controllers\Owner\{{ module }};

use App\Http\Controllers\Controller;
use App\Http\Controllers\Owner\{{ module }}\Dto\{{ module }}ListDTO;
use App\Http\Helpers\ResponseBuilder;
use App\Modules\{{ module }}\Application\List\List{{ module }}Query;
use App\Modules\{{ module }}\Application\ListCount\ListCount{{ module }}Query;
use App\Modules\{{ module }}\Application\ListCount\ListCount{{ module }}Response;
use App\Modules\{{ module }}\Application\{{ module }}Responses;
use App\Modules\Shared\Domain\Bus\Query\QueryBus;
use App\Modules\Shared\Validator\Infraestructure\LaravelDTOGenerator;
use Illuminate\Http\Request;

final class {{ module }}ListController extends Controller
{
    private $domain;

    public function __construct(
        private QueryBus $queryBus,
        private LaravelDTOGenerator $dtoGenerator,
    ) {
        $this->domain = '{{ module }}';
    }

    public function __invoke({{ invokeSig }})
    {
        /** @var {{ module }}ListDTO $dto */
        $dto = {{ dtoCall }};

        /** @var {{ module }}Responses $response */
        $response = $this->queryBus->ask(new List{{ module }}Query(
{{ listArgs }}
        ));

        /** @var ListCount{{ module }}Response $responseCount */
        $responseCount = $this->queryBus->ask(new ListCount{{ module }}Query(
{{ countArgs }}
        ));

        return ResponseBuilder::generate(
            $response->data(),
            Responses{{ module }}::RESPONSE_LIST,
            $this->domain,
            $responseCount->count
        );
    }
}
