#ifndef DEBUG_H
#define DEBUG_H

#include "kadu-config.h"

/* pierwsze 8 bitow zarezerwowane jest dla libgadu */

/* start funkcji */
#define KDEBUG_FUNCTION_START (1<<8)
/* koniec funkcji */
#define KDEBUG_FUNCTION_END   (1<<9)

/* zwykle inforamcje */
#define KDEBUG_INFO           (1<<10)
/* niegrozne ostrzezenie */
#define KDEBUG_WARNING        (1<<11)
/* powazny blad, ale sytuacja jest do obejscia */
#define KDEBUG_ERROR          (1<<12)
/* blad fatalny, mozliwe ze program sie wywroci */
#define KDEBUG_PANIC          (1<<13)

/* duzo danych do wypisania */
#define KDEBUG_DUMP           (1<<14)
/* informacja dotyczaca obslugi sieci */
#define KDEBUG_NETWORK        (1<<15)

/* 2^31-1 - wszystkie komunikaty */
#define KDEBUG_ALL 2147483647

/*
	<<< kdebug >>>
	Wyświetla komunikat debugujący na konsoli.
	Składnia jak w printf.
*/
#ifdef DEBUG_ENABLED
#define kdebug(format,args...) \
	_kdebug_with_mask(KDEBUG_ALL,__FILE__,__LINE__,format,##args)
#define kdebugm(mask,format,args...) \
	_kdebug_with_mask(mask,__FILE__,__LINE__,format,##args)
#define kdebugmf(mask,format,args...) \
	_kdebug_with_mask(mask,__FILE__,__LINE__,"%s: " format,__PRETTY_FUNCTION__,##args)
#else
#define kdebug(format,args...)
#define kdebugm(mask,format,args...)
#define kdebugmf(mask,format,args...)
#endif


/*
	<<< kdebugf >>>
	Wyświetla komunikat debugujący zawierający
	nazwę aktualnie wykonywanej funkcji.
	Z założenia makro to powinno być wywołane
	w pierwszej linii każdej funkcji. Dzięki
	temu można będzie w przyszłości śledzić
	działanie programu.
*/	
#define kdebugf() \
	kdebugm(KDEBUG_FUNCTION_START, "%s\n",__PRETTY_FUNCTION__)

#define kdebugf2() \
	kdebugm(KDEBUG_FUNCTION_END, "%s end\n",__PRETTY_FUNCTION__)

/*
	Funkcja pomocnicza. Nie używać.
*/
#ifdef DEBUG_ENABLED
void _kdebug_with_mask(int mask, const char* file,const int line,const char* format,...);
#endif
extern int debug_mask;

#endif
