#ifndef IRSSI_CORE_LEVELS_H
#define IRSSI_CORE_LEVELS_H

/* This is pretty much IRC specific, but I think it would be easier for
   other chats to try to use these same levels instead of implementing too
   difficult message leveling system (which might be done if really
   needed..). */

/* clang-format off */
/* Message levels */
enum {
	MSGLEVEL_CRAP         = 0x0000001,
	MSGLEVEL_MSGS         = 0x0000002,
	MSGLEVEL_PUBLIC       = 0x0000004,
	MSGLEVEL_NOTICES      = 0x0000008,
	MSGLEVEL_SNOTES       = 0x0000010,
	MSGLEVEL_CTCPS        = 0x0000020,
	MSGLEVEL_ACTIONS      = 0x0000040,
	MSGLEVEL_JOINS        = 0x0000080,
	MSGLEVEL_PARTS        = 0x0000100,
	MSGLEVEL_QUITS        = 0x0000200,
	MSGLEVEL_KICKS        = 0x0000400,
	MSGLEVEL_MODES        = 0x0000800,
	MSGLEVEL_TOPICS       = 0x0001000,
	MSGLEVEL_WALLOPS      = 0x0002000,
	MSGLEVEL_INVITES      = 0x0004000,
	MSGLEVEL_NICKS        = 0x0008000,
	MSGLEVEL_DCC          = 0x0010000,
	MSGLEVEL_DCCMSGS      = 0x0020000,
	MSGLEVEL_CLIENTNOTICE = 0x0040000,
	MSGLEVEL_CLIENTCRAP   = 0x0080000,
	MSGLEVEL_CLIENTERROR  = 0x0100000,
	MSGLEVEL_HILIGHT      = 0x0200000,

	MSGLEVEL_ALL          = 0x03fffff,

	MSGLEVEL_NOHILIGHT    = 0x1000000, /* Don't highlight this message */
	MSGLEVEL_NO_ACT       = 0x2000000, /* Don't trigger channel activity */
	MSGLEVEL_NEVER        = 0x4000000, /* never ignore / never log */
	MSGLEVEL_LASTLOG      = 0x8000000, /* used for /lastlog */

	MSGLEVEL_HIDDEN       = 0x10000000, /* Hidden from view */
	MSGLEVEL_RESERVED1    = 0x20000000,
	MSGLEVEL_RESERVED2    = 0x40000000,
	MSGLEVEL_FORMAT       = (int)0x80000000  /* Format data */
};
/* clang-format on */

int level_get(const char *level);
int level2bits(const char *level, int *errorp);
char *bits2level(int bits);
int combine_level(int dest, const char *src);

#endif
