#ifndef KEY_VALUE_PAIR_H
#define KEY_VALUE_PAIR_H

#include <stdbool.h>
#include <stddef.h>

// Structures
typedef struct key_value_pair{
  char *key;
  char *value;
  struct key_value_pair *next;
  char *(*toString)(struct key_value_pair *);
} key_value_pair;

// Functions

char *key_value_pair_list_to_string(key_value_pair **head);

key_value_pair *init_key_value_pair(const char *key, const char *value);
void free_key_value_pair(key_value_pair **kv);
void free_key_value_pairs(key_value_pair **head, key_value_pair **tail);

int add_key_value_pair(key_value_pair *kv, key_value_pair **head, key_value_pair **tail);
void remove_key_value_pair(key_value_pair *kv, key_value_pair **head, key_value_pair **tail);

void extract_key_value_pairs(char *red_str, key_value_pair **head, key_value_pair **tail, bool doReduce);

#endif //KEY_VALUE_PAIR_H
