/* SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later */

#include <stdarg.h>
#include <stdio.h>

#include "libmctp.h"
#include "libmctp-log.h"

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif

#ifdef MCTP_HAVE_SYSLOG
#include <syslog.h>
#endif

enum {
	MCTP_LOG_NONE,
	MCTP_LOG_STDIO,
	MCTP_LOG_SYSLOG,
	MCTP_LOG_CUSTOM,
} log_type = MCTP_LOG_NONE;

static int log_stdio_level;
static void (*log_custom_fn)(int, const char *, va_list);

void mctp_prlog(int level, const char *fmt, ...)
{
	va_list ap;

	va_start(ap, fmt);

	switch (log_type) {
	case MCTP_LOG_NONE:
		break;
	case MCTP_LOG_STDIO:
		if (level <= log_stdio_level) {
			vfprintf(stderr, fmt, ap);
			fputs("\n", stderr);
		}
		break;
	case MCTP_LOG_SYSLOG:
#ifdef MCTP_HAVE_SYSLOG
		vsyslog(level, fmt, ap);
#endif
		break;
	case MCTP_LOG_CUSTOM:
		log_custom_fn(level, fmt, ap);
		break;
	}

	va_end(ap);
}

void mctp_set_log_stdio(int level)
{
	log_type = MCTP_LOG_STDIO;
	log_stdio_level = level;
}

void mctp_set_log_syslog(void)
{
	log_type = MCTP_LOG_SYSLOG;
}

void mctp_set_log_custom(void (*fn)(int, const char *, va_list))
{
	log_type = MCTP_LOG_CUSTOM;
	log_custom_fn = fn;
}
