// htab_lookup_add
// Řešení IJC-DU2, příklad b), 22.4.2024
// Autor: Roman Nečas, FIT
// Přeloženo: gcc 11.4.0

#include <stdlib.h>
#include <string.h>
#include "htab.h"
#include "htab_struct.h"

htab_pair_t *htab_lookup_add(htab_t *t, htab_key_t key) {
    size_t idx = htab_hash_function(key) % t->arr_size;
    struct htab_item *item = t->arr_ptr[idx];
    struct htab_item *prev = NULL;
    while (item != NULL) {
        if (strcmp(item->pair.key, key) == 0)
            return &item->pair;
        prev = item;
        item = item->next;
    }

    // kluc nebol najdeny, musime pridat novy zaznam
    char *new_key = malloc(strlen(key) + 1);
    if (new_key == NULL)
        return NULL;
    strcpy(new_key, key);

    struct htab_item *new_item = malloc(sizeof(struct htab_item));
    if (new_item == NULL) {
        free(new_key);
        return NULL;
    }
    new_item->pair.key = new_key;
    new_item->pair.value = 0;
    new_item->next = NULL;

    if (prev == NULL)
        t->arr_ptr[idx] = new_item;
    else
        prev->next = new_item;

    t->size++;
    return &new_item->pair;
}