//#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "../src/log.h"
#include <stdbool.h>

// HECK LOG C usage

int main(void)
{
    // Test Levels
    {
        HECK_LOG_ERR("SHOULD NOT SEE THIS");

        heck_log_level_set(HECK_LOG_LEVEL_ALL);
        HECK_LOG_ERR();
        HECK_LOG_WARN();
        HECK_LOG_INFO();

        heck_log_level_set(HECK_LOG_LEVEL_ERROR);
        HECK_LOG_ERR();
        HECK_LOG_WARN("SHOULD NOT SEE THIS");
        HECK_LOG_INFO("SHOULD NOT SEE THIS");
    }

    // Logfile
    {
        const char *path = NULL;
        heck_log_logfile_path_get(&path);
        printf("LOGFILE PATH: %s\n", path);
        heck_log_logfile_path_set("newlogfile.log");
    }

    // BASIC USAGE MACRO
    {
        heck_log_level_set(HECK_LOG_LEVEL_INFO);
        // no message
        HECK_LOG_INFO();

        // simple string literal
        HECK_LOG_INFO("HELLO");

        // sprintf style formatting
        char *str2 = strdup("best");
        HECK_LOG_INFO("The %s number is %i", str2, 23);
        free(str2);

        // does not compile, 1st must be literal fmt string
        // HECK_LOG_WARN(str1);
    }

    // BASIC USAGE FUNC
    {
        heck_log_level_set(HECK_LOG_LEVEL_INFO);
        // literal
        heck_log("Literal RAW");

        // c-string
        char *str2 = strdup("c-string RAW");
        heck_log(str2);
        free(str2);

        heck_log_h1("HEADING 1");
        heck_log_h2("HEADING 2");
        heck_log_h3("HEADING 3");
    }

    // Colors functions only
    {
        heck_log_h1("Colors functions only");
        heck_log("DEFAULT COLOR");
        heck_log_color_set(HECK_LOG_COLOR_GREEN);
        heck_log("DEFAULT COLOR AFTER SET GREEN");
        heck_log_color_set(HECK_LOG_COLOR_YELLOW);
        strdup("YELLOW ONE OFF");
        heck_log(strdup("YELLOW ONE OFF"));
        heck_log_color_set(HECK_LOG_COLOR_RESET);
        heck_log("COLOR RESET");
    }

    // Colors using Macros
    {
        heck_log_h1("Colors using Macros");
        heck_log("DEFAULT COLOR");
        heck_log_color_set(HECK_LOG_COLOR_GREEN);
        HECK_LOG_ERR("DEFAULT COLOR AFTER SET GREEN");
        heck_log_color_set(HECK_LOG_COLOR_YELLOW);
        HECK_LOG_ERR("YELLOW ONE OFF");
        heck_log_color_set(HECK_LOG_COLOR_RESET);
        HECK_LOG_ERR("COLOR RESET");
    }

    heck_log("ALL TEST SUCCESSFUL");
}