/* SPDX-License-Identifier: LGPL-2.1-or-later */
/*
 *
 *  BlueZ - Bluetooth protocol stack for Linux
 *
 *  Copyright (C) 2011-2014  Intel Corporation
 *  Copyright (C) 2002-2010  Marcel Holtmann <marcel@holtmann.org>
 *
 *
 */

#include <stdbool.h>
#include <inttypes.h>

bool use_color(void);

enum monitor_color { COLOR_AUTO, COLOR_ALWAYS, COLOR_NEVER };
void set_monitor_color(enum monitor_color);

#define COLOR_OFF	"\x1B[0m"
#define COLOR_BLACK	"\x1B[0;30m"
#define COLOR_RED	"\x1B[0;31m"
#define COLOR_GREEN	"\x1B[0;32m"
#define COLOR_YELLOW	"\x1B[0;33m"
#define COLOR_BLUE	"\x1B[0;34m"
#define COLOR_MAGENTA	"\x1B[0;35m"
#define COLOR_CYAN	"\x1B[0;36m"
#define COLOR_WHITE	"\x1B[0;37m"
#define COLOR_WHITE_BG	"\x1B[0;47;30m"
#define COLOR_HIGHLIGHT	"\x1B[1;39m"

#define COLOR_RED_BOLD		"\x1B[1;31m"
#define COLOR_GREEN_BOLD	"\x1B[1;32m"
#define COLOR_BLUE_BOLD		"\x1B[1;34m"
#define COLOR_MAGENTA_BOLD	"\x1B[1;35m"

#define COLOR_ERROR	"\x1B[1;31m"
#define COLOR_WARN	"\x1B[1m"
#define COLOR_INFO	COLOR_OFF
#define COLOR_DEBUG	COLOR_WHITE

#define FALLBACK_TERMINAL_WIDTH 80

#define print_indent(indent, color1, prefix, title, color2, fmt, args...) \
do { \
	printf("%*c%s%s%s%s" fmt "%s\n", (indent), ' ', \
		use_color() ? (color1) : "", prefix, title, \
		use_color() ? (color2) : "", ## args, \
		use_color() ? COLOR_OFF : ""); \
} while (0)

#define print_text(color, fmt, args...) \
		print_indent(8, COLOR_OFF, "", "", color, fmt, ## args)

#define print_field(fmt, args...) \
		print_indent(8, COLOR_OFF, "", "", COLOR_OFF, fmt, ## args)

struct bitfield_data {
	uint64_t bit;
	const char *str;
};

static inline uint64_t print_bitfield(int indent, uint64_t val,
					const struct bitfield_data *table)
{
	uint64_t mask = val;
	int i;

	for (i = 0; table[i].str; i++) {
		if (val & (((uint64_t) 1) << table[i].bit)) {
			print_field("%*c%s", indent, ' ', table[i].str);
			mask &= ~(((uint64_t) 1) << table[i].bit);
		}
	}

	return mask;
}

void set_default_pager_num_columns(int num_columns);
int num_columns(void);

void open_pager(void);
void close_pager(void);
