#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <stddef.h>

#define LIBKODIK_PARAMS_TYPES_START 7           /* Длина начала параматра в строке `type=` */
#define LIBKODIK_PARAMS_TYPES_NO_VALUE 42       /* Позиция в строке, если парамерт необходимо удалить полностью */
#define LIBKODIK_PARAMS_TYPES_MAX 12            /* Максимально возможное кол-во параметров для type=... */
#define LIBKODIK_PARAMS_PRINTF_LENGTH_STRING 3  /* Размер `%s,` */

void
libkodik_api_countries_param_types_remove_unusable_values(char *psz_value, uint8_t i_count) {
    size_t const s_strlen = strlen(psz_value);
    char buffer[s_strlen];
    (void) strcpy(buffer, psz_value);
    if (0 == i_count) { /* Кол-во параметров равно нулю? Просто срезает от и до */
        (void) memcpy
        (
            psz_value,
            &buffer[LIBKODIK_PARAMS_TYPES_NO_VALUE],
            s_strlen - LIBKODIK_PARAMS_TYPES_NO_VALUE + 1
        );
        return;
    }
    (void) memmove
    (
        &psz_value[LIBKODIK_PARAMS_TYPES_START],
        &buffer[LIBKODIK_PARAMS_TYPES_START] + (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count)),
        s_strlen - (LIBKODIK_PARAMS_PRINTF_LENGTH_STRING * (LIBKODIK_PARAMS_TYPES_MAX - i_count) + 1)
    );
}

int main(void) {
	char buffer_flags[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
	char buffer_flags2[] = "types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s";
    uint8_t i_flags_count = 4;
    if (12 != i_flags_count) {
        libkodik_api_countries_param_types_remove_unusable_values(buffer_flags, i_flags_count);
    }
    printf("Changed:   %s\n", 	buffer_flags);
    printf("Original:  %s\n",	"types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s");
    i_flags_count = 0;
    if (12 != i_flags_count) {
        libkodik_api_countries_param_types_remove_unusable_values(buffer_flags2, i_flags_count);
    }
    printf("Changed2:  %s\n", 	buffer_flags2);
    printf("Original2: %s\n",	"types=%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s&year=%lu&translation_id=%lu&translation_type=%s&sort=%s");
	return 0;
}
