class EventsRequest extends PageablePricesRequest {

    @Override
    public Map<String, String> parameters() {
        Map<String, String> parameters = new HashMap<>();

        if (Objects.nonNull(after)) {
            parameters.put("after", after.toString());
        }
        if (Objects.nonNull(before)) {
            parameters.put("before", before.toString());
        }
        if (Objects.nonNull(eventIds) && !eventIds.isEmpty()) {
            List<String> ids = eventIds.stream()
                    .map(String::valueOf)
                    .collect(Collectors.toList());
            parameters.put("ids", String.join(",", ids));
        }
        if (Objects.nonNull(categoryIds) && !categoryIds.isEmpty()) {
            List<String> ids = categoryIds.stream()
                    .map(String::valueOf)
                    .collect(Collectors.toList());
            parameters.put("category-ids", String.join(",", ids));
        }
        if (Objects.nonNull(sportIds) && !sportIds.isEmpty()) {
            List<String> ids = sportIds.stream()
                    .map(String::valueOf)
                    .collect(Collectors.toList());
            parameters.put("sport-ids", String.join(",", ids));
        }
        if (Objects.nonNull(statuses) && !statuses.isEmpty()) {
            List<String> states = statuses.stream()
                    .map(EventStatus::name)
                    .collect(Collectors.toList());
            parameters.put("states", String.join(",", states));
        }
        parameters.put("include-event-participants", String.valueOf(includeEventParticipants));
        if (includePrices) {
            parameters.put("include-prices", "true");
            parameters.putAll(pricesParameters());
        }

        return parameters;
    }

    private  EventsRequest(Init<?> init);

}