//#include <iostream>
//#include <stdio.h>
#include <iostream>
#include <cstring>
#include "../src/log.h"
#include <string>
#include <vector>

// HECK LOG C++ usage

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

        Heck::Log::set_level(HECK_LOG_LEVEL_ALL);
        HECK_LOG_ERR("");
        HECK_LOG_WARN("");
        HECK_LOG_INFO("");

        Heck::Log::set_level(HECK_LOG_LEVEL_ERROR);
        HECK_LOG_ERR("");
        HECK_LOG_WARN("SHOULD NOT SEE THIS");
        HECK_LOG_INFO("SHOULD NOT SEE THIS");
    }

    // Logfile
    {
        std::cout << " LOGFILE PATH: " << Heck::Log::Backend::Logfile::get_path();
        Heck::Log::Backend::Logfile::set_path("newlogfile.log");
    }

    // BASIC USAGE MACRO
    {
        Heck::Log::set_level(HECK_LOG_LEVEL_INFO);
        // no message
        HECK_LOG_INFO("");

        // literals
        HECK_LOG_INFO("literal");

        // string concats
        std::string str{ "casts" };
        HECK_LOG_ERR("everything " + str + " to a string");

        // operator<< overloads
        int i{ 23 };
        HECK_LOG_ERR(i);
    }

    // BASIC USAGE FUNCTIONS
    {
        Heck::Log::set_level(HECK_LOG_LEVEL_INFO);
        // no message
        Heck::Log::log("");

        // literals
        Heck::Log::log("literal");

        // string concats
        std::string str{ "casts" };
        Heck::Log::log("everything " + str + " to a string");

        // operator<< overloads
        // WONT compile, needs std::string
        // int i{ 23 };
        // Heck::Log::log(i);

        Heck::Log::logH1("HEADING 1");
        Heck::Log::logH2("HEADING 2");
        Heck::Log::logH3("HEADING 3");
    }

    // Colors functions only
    {
        Heck::Log::logH1("Colors functions only");
        Heck::Log::log("BLUE LOG", HECK_LOG_COLOR_BLUE);
        Heck::Log::log("DEFAULT COLOR");
        Heck::Log::set_color(HECK_LOG_COLOR_GREEN);
        Heck::Log::log("DEFAULT COLOR AFTER SET GREEN");
        Heck::Log::log("YELLOW ONE OFF", HECK_LOG_COLOR_YELLOW);
        Heck::Log::log("DEFAULT COLOR AGAIN");
    }

    // Colors using Macros
    {
        Heck::Log::set_color(HECK_LOG_COLOR_DEFAULT);
        Heck::Log::logH1("Colors using Macros");
        HECK_LOG_ERR("DEFAULT COLOR");
        Heck::Log::log("BLUE LOG", HECK_LOG_COLOR_BLUE);
        HECK_LOG_ERR("DEFAULT COLOR AGAIN");
        Heck::Log::set_color(HECK_LOG_COLOR_GREEN);
        Heck::Log::log("YELLOW ONE OFF", HECK_LOG_COLOR_YELLOW);
        HECK_LOG_ERR("DEFAULT COLOR GREEN");
    }

    Heck::Log::log("ALL TEST SUCCESSFUL");
}