
#include <stdio.h>

#include "logger.h"

static LogLevel     _global_log_level     = ALL;
static OutputMethod _global_output_method = STD_OUTPUT;


void setOutputMethod(OutputMethod method)
{
   _global_output_method = method;
}

void setLogLevelDisplayed(LogLevel level)
{
    _global_log_level = level;
}

LogLevel getLogLevelDisplayed()
{
    return _global_log_level;
}

char* printLogLevel(LogLevel loglevel)
{
    static char* logValues[] = {
        "SEVERE",
        "WARNING",
        "DEBUG",
        "INFO",
        "NORMAL",
        "UNKNOWN LEVEL"
    };

    switch(loglevel)
    {
        case SEVERE :
            return logValues[0];
        case WARNING:
            return logValues[1];
        case DEBUG:
            return logValues[2];
        case INFO:
            return logValues[3];
        case NORMAL:
            return logValues[4];
        default:
            return logValues[5];
    }
}

void logMessage(LogLevel level,const char* header,const char* message)
{
    FILE* f = NULL;
    if(level >= _global_log_level)
    {
        switch(_global_output_method)
        {
            case STD_OUTPUT:
                printf(" - %s <%s> : '%s'\n",printLogLevel(level),header,message);
                break;
            case ERR_OUTPUT:
                fprintf(stderr," - %s <%s> : '%s'\n",printLogLevel(level),header,message);
                break;
            case FILE_OUTPUT:
                f = fopen("log","a");
                if (f != NULL)
                {
                    fprintf(f, " - %s <%s> : '%s'\n",printLogLevel(level),header,message);
                    fclose(f);
                }
                else
                {
                    perror("Unable to open log file");
                }
                break;
            default:
                // no log here
                break;
        }
    }
}
