/*
 * Copyright (c) 2018-2020 Atmosphère-NX
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms and conditions of the GNU General Public License,
 * version 2, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef FUSEE_LOG_H
#define FUSEE_LOG_H

#define PRINT_MESSAGE_MAX_LENGTH 1024

#include <stdarg.h>

typedef enum {
    SCREEN_LOG_LEVEL_NONE       = 0,
    SCREEN_LOG_LEVEL_ERROR      = 1,
    SCREEN_LOG_LEVEL_WARNING    = 2,
    SCREEN_LOG_LEVEL_MANDATORY  = 3,    /* No log prefix. */
    SCREEN_LOG_LEVEL_INFO       = 4,
    SCREEN_LOG_LEVEL_DEBUG      = 5,
    SCREEN_LOG_LEVEL_SD_DEBUG   = 6,

    SCREEN_LOG_LEVEL_NO_PREFIX  = 0x100 /* OR this to your LOG_LEVEL to prevent prefix creation. */
} ScreenLogLevel;

extern ScreenLogLevel g_screen_log_level;

void log_set_log_level(ScreenLogLevel screen_log_level);
ScreenLogLevel log_get_log_level();
void log_to_uart(const char *message);
void vprint(ScreenLogLevel screen_log_level, const char *fmt, va_list args);
void print(ScreenLogLevel screen_log_level, const char* fmt, ...);

#endif