// SPDX-License-Identifier: GPL-2.0-only
/*
 * debug.h - header file for debug and log messages.
 *
 * Copyright (C) 2025 Genexis AB.
 *
 * Author: anjan.chanda@genexis.eu
 */

#ifndef WIFIMNGR_DEBUG_H
#define WIFIMNGR_DEBUG_H

/* log feature categories */
enum {
	LOG_CMD,	/* command request and response */
	LOG_EVENT,	/* events */
	LOG_DEFAULT,	/* uncategorized messages */
};

/* log levels */
enum {
	LOGLEVEL_ERROR,
	LOGLEVEL_WARN,
	LOGLEVEL_INFO,
	LOGLEVEL_DEBUG,
	LOGLEVEL_TRACE,
};

#define LOG_FEATURE(x)	BIT(x)
#define LOG_FEATURE_ALL	BIT(LOG_DEFAULT) | (BIT(LOG_DEFAULT) - 1)

#define DEFAULT_LOGLEVEL	LOGLEVEL_INFO

uint32_t logfeature_to_enum(const char *s);
const char *logfeature_to_string(uint32_t e);

void restart_logging(void *opts);
void stop_logging(void);
void log_message(int feature, int level, const char *fmt, ...)
	__attribute__((__format__(__printf__, 3, 4)));

#define wm_err(f, fmt, ...)         log_message(f, 0, fmt, ## __VA_ARGS__)
#define wm_warn(f, fmt, ...)        log_message(f, 1, fmt, ## __VA_ARGS__)
#define wm_info(f, fmt, ...)        log_message(f, 2, fmt, ## __VA_ARGS__)
#define wm_dbg(f, fmt, ...)         log_message(f, 3, fmt, ## __VA_ARGS__)
#define wm_trace(f, fmt, ...)       log_message(f, 4, fmt, ## __VA_ARGS__)

#define wifimngr_err(fmt, ...)      log_message(LOG_DEFAULT, 0, fmt, ## __VA_ARGS__)
#define wifimngr_warn(fmt, ...)     log_message(LOG_DEFAULT, 1, fmt, ## __VA_ARGS__)
#define wifimngr_info(fmt, ...)     log_message(LOG_DEFAULT, 2, fmt, ## __VA_ARGS__)
#define wifimngr_dbg(fmt, ...)      log_message(LOG_DEFAULT, 3, fmt, ## __VA_ARGS__)
#define wifimngr_trace(fmt, ...)    log_message(LOG_DEFAULT, 4, fmt, ## __VA_ARGS__)

#endif /* WIFIMNGR_DEBUG_H */