#ifndef __templates_h__
#define __templates_h__

struct TemplateVars
{
	TemplateVars();
	~TemplateVars();

	struct {
		wchar_t *val;
		bool del;
	}
		vars[256];

	__forceinline wchar_t* GetVar(uint8_t id) {
		return vars[id].val;
	}

	void SetNick(wchar_t *v);
	void SetVar(uint8_t id, wchar_t *v, bool d);
};

typedef void (*VarFunc)(TemplateVars *vars, MCONTACT hContact, ItemData *item);

struct TemplateInfo
{
	char*    setting;
	wchar_t* group;
	int      iIcon;
	wchar_t* title;
	wchar_t* defvalue;
	wchar_t* value;
	wchar_t* tmpValue;
	VarFunc vf[6];

	HICON getIcon() const;
};

enum
{
	TPL_TITLE,

	TPL_MESSAGE,
	TPL_MSG_HEAD,
	TPL_MSG_GRP,
	TPL_FILE,
	TPL_SIGN,
	TPL_PRESENCE,
	TPL_OTHER,

	TPL_AUTH,
	TPL_ADDED,
	TPL_DELETED,

	TPL_COPY_MESSAGE,
	TPL_COPY_FILE,
	TPL_COPY_URL,
	TPL_COPY_SIGN,
	TPL_COPY_OTHER,

	TPL_COPY_AUTH,
	TPL_COPY_ADDED,
	TPL_COPY_DELETED,
	TPL_COPY_PRESENCE,

	TPL_COUNT
};

extern TemplateInfo templates[TPL_COUNT];

void LoadTemplates();
void SaveTemplates();

#endif // __templates_h__