#include "headers.h"

HIMAGELIST himl;

void addIcons(TCHAR* szModuleFileName)
{
	SKINICONDESC sid={0};
	char name[32];
	sid.cbSize = sizeof(sid);
	sid.ptszSection = _T(modFullname);
	sid.ptszDefaultFile = szModuleFileName;
	sid.flags = SIDF_ALL_TCHAR;

	// closed known module
	sid.ptszDescription = LPGENT("Closed Known Module");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_KNOWN);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_KNOWN;
	Skin_AddIcon(&sid);

	// open known module
	sid.ptszDescription = LPGENT("Open Known Module");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_KNOWNOPEN);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_KNOWNOPEN;
	Skin_AddIcon(&sid);

	// closed unknown module
	sid.ptszDescription = LPGENT("Closed Unknown Module");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_UNKNOWN);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_UNKNOWN;
	Skin_AddIcon(&sid);

	// open unknown module
	sid.ptszDescription = LPGENT("Open Unknown Module");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_UNKNOWNOPEN);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_UNKNOWNOPEN;
	Skin_AddIcon(&sid);

	// settings contact
	sid.ptszDescription = LPGENT("Settings");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_SETTINGS);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_SETTINGS;
	Skin_AddIcon(&sid);

	// contact group
	sid.ptszDescription = LPGENT("Contacts Group");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_CONTACTS);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_CONTACTS;
	Skin_AddIcon(&sid);

	// unknwon contact
	sid.ptszDescription = LPGENT("Unknown Contact");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_OFFLINE);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_OFFLINE;
	Skin_AddIcon(&sid);

	// known contact
	sid.ptszDescription = LPGENT("Known Contact");
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", ICO_ONLINE);
	sid.pszName = name;
	sid.iDefaultIndex = -ICO_ONLINE;
	Skin_AddIcon(&sid);
}

HICON LoadSkinnedDBEIcon(int icon)
{
	char name[32];
	mir_snprintf(name, SIZEOF(name), "DBE++_%d", icon);
	HICON hIcon = (HICON)CallService(MS_SKIN2_GETICON,0,(LPARAM)name);
	return (hIcon) ? hIcon : LoadIcon(hInst, MAKEINTRESOURCE(icon));
}


int AddIconToList(HIMAGELIST hil, HICON hIcon)
{

	if (!hIcon || !hil) return 0;

	ImageList_AddIcon(hil, hIcon);

	return 1;

}


static PROTOCOLDESCRIPTOR **protocols = NULL;
static int protoCount = 0;
static int shift = 0;


void AddProtoIconsToList(HIMAGELIST hil, int newshift)
{
    HICON hIcon;
	int i;
	shift = newshift;

	CallService(MS_PROTO_ENUMPROTOCOLS,(WPARAM)&protoCount,(LPARAM)&protocols);

	for(i = 0 ;i < protoCount; i++)
	{
		if (protocols[i]->type != PROTOTYPE_PROTOCOL)
			continue;

		if (hIcon=LoadSkinnedProtoIcon(protocols[i]->szName, ID_STATUS_ONLINE))
			AddIconToList(hil, hIcon);
		else
			AddIconToList(himl, LoadSkinnedDBEIcon(ICO_ONLINE));
	}
}


int GetProtoIcon(char *szProto)
{
    int result = DEF_ICON;
	int i, n = 0;

    if (!protoCount || !protocols || !szProto) return result;

	for(i = 0 ;i < protoCount; i++)
	{
		if (protocols[i]->type != PROTOTYPE_PROTOCOL)
			continue;

		if (!mir_strcmp(protocols[i]->szName, szProto))
		{
			result = n + shift;
			break;
		}

		n++;

	}

	return result;
}


BOOL IsProtocolLoaded(char* pszProtocolName)
{
/*
    if (pszProtocolName && pszProtocolName[0])
    {
		int res = CallService(MS_PROTO_ISPROTOCOLLOADED, 0, (LPARAM)pszProtocolName);

		if (res != CALLSERVICE_NOTFOUND && res)
			return TRUE;
	}
*/
	int i;

    if (protoCount)
		for(i = 0 ;i < protoCount; i++)
		{
			if (protocols[i]->type != PROTOTYPE_PROTOCOL)
				continue;

			if (!mir_strcmp(protocols[i]->szName, pszProtocolName))
				return TRUE;
		}

	return FALSE;
}