#pragma once

#include <Arduino.h>

#define LOG_INFO_STR "INFO"
#define LOG_WARNING_STR "WARNING"
#define LOG_ERROR_STR "ERROR"

#define LOG(location, type, fmt, ...) \
  Serial.printf("[%lu] [%s:%d] %s - ", millis(), location, __LINE__, type); \
  Serial.printf(fmt, ##__VA_ARGS__); \
  Serial.println();

#define LOG_INFO(location, fmt, ...) LOG(location, LOG_INFO_STR, fmt, ##__VA_ARGS__)
#define LOG_WARNING(location, fmt, ...) LOG(location, LOG_WARNING_STR, fmt, ##__VA_ARGS__)
#define LOG_ERROR(location, fmt, ...) LOG(location, LOG_ERROR_STR, fmt, ##__VA_ARGS__)
