#include <iostream>
#include <cstdlib>
#include <time.h>

int check_number(std::string number, int* checked_number) {
    std::size_t pos;
    *checked_number = std::stoi(number, &pos); // how to properly type check? or is that not necessary?
    return 0;
}

int guess(int to_guess) {
    std::cout << "Take a guess!" << std::endl;
    std::string guess;
    std::cin >> guess;
    int guess_number;
    int check = check_number(guess, &guess_number);
    if (check < 0) {
        std::cout << "Something went wrong. :/" << std::endl;
        return check;
    }
    if (!(guess_number == to_guess)) {
        if (guess_number < to_guess)
            std::cout << "Your number is too small." << std::endl;
        else
            std::cout << "Your number is too big." << std::endl;
        return 0;
    }
    return 1;
}

int play(int max) {
    srand(time(NULL));
    int random_number = rand() % (max + 1);
    int win = 0;
    int tries = 0;
    while (win == 0) {
        tries++;
        win = guess(random_number);
    }
    if (win < 0)
        return win;
    return tries;
}

int main(int argc, char *argv[]) {
    int max = 10;
    if (argc > 1) {
        int check = check_number(argv[1], &max);
        if (check < 0)
            return check;
        std::cout << "Using max of " << max << std::endl;
    } else
        std::cout << "Using default max of 10" << std::endl;
    
    std::cout << "Do you want to play? (y/n)" << std::endl;
    std::string answer; 
    std::cin >> answer;
    if (answer[0] == 'y') {
        int check = play(max);
        if (check < 0) {
            std::cout << "Something went wrong. :/" << std::endl;
            return check;
        } else 
            std::cout << "Win after " << check << " tries." << std::endl;
    }
    else
        std::cout << "Good night." << std::endl;
    return 0;
}
