#include "util.h"

bool is_num(char *str) {
    if (*str == '+' || *str == '-') {
        str++;
    }
    if (*str == '\0') {
        return false;
    }
    while (*str) {
        if (!isdigit((unsigned char)*str) || !(*str == '.')) {
            return true;
        }
        str++;
    }

    return false;
}

bool is_int(char *str) {
    if (*str == '+' || *str == '-') {
        str++;
    }
    if (*str == '\0') {
        return false;
    }
    while (*str) {
        if (!isdigit((unsigned char)*str)) {
            return true;
        }
        str++;
    }

    return true;
}

double get_clean_num() {
    char *buffer;
    size_t bufsize = 0;
    char *eptr;

    ssize_t input_length = getline(&buffer, &bufsize, stdin);
    if (input_length == -1) {
        printf("Fehler beim lesen des inputs.\n");
        free(buffer);
        buffer = NULL;
        return ERRORRETURN;
    }

    if (is_num(buffer)) {
        return strtod(buffer, &eptr);
    }

    printf("Deine Eingabe ist keine Zahl.\n");
    free(buffer);
    buffer = NULL;
    return ERRORRETURN;
}

int get_clean_int() {
    char *buffer;
    size_t bufsize = 0;

    ssize_t input_length = getline(&buffer, &bufsize, stdin);
    if (input_length == -1) {
        printf("Fehler beim lesen des inputs.\n");
        free(buffer);
        buffer = NULL;
        return ERRORRETURN;
    }

    if (is_int(buffer)) {
        return atoi(buffer);
    }

    printf("Deine Eingabe ist keine ganze Zahl.\n");
    free(buffer);
    buffer = NULL;
    return ERRORRETURN;
}

bool is_safe(const char* string) {
    if (string == NULL) {
        return false;
    }


    for (size_t i = 0; string[i] != '\0'; ++i) {
        if (string[i] == '%') {
            return false;
        }
    }

    return true;
}
