#ifndef commonheaders_h__
#define commonheaders_h__

/*
Traffic Counter plugin for Miranda IM 
Copyright 2007-2011 Mironych.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
*/

#include <windows.h>
#include <windowsx.h>
#include <commctrl.h>

#include <win2k.h>
#include <m_system.h>

#include <newpluginapi.h>
#include <m_netlib.h>
#include <m_langpack.h>
#include <m_clc.h>
#include <m_clist.h>
#include <m_options.h>
#include <m_protosvc.h>
#include <m_cluiframes.h>
#include <m_fontservice.h>
#include <m_popup.h>
#include <m_skin.h>
#include <m_hotkeys.h>

#include <m_variables.h>
#include <m_skin_eng.h>
#include <m_tipper.h>

#include "resource.h"
#include "version.h"
#include "misc.h"
#include "opttree.h"
#include "vars.h"
#include "statistics.h"
#include "TrafficCounter.h"

#pragma pack(push)
#pragma pack(1)
typedef	struct
{
	BYTE Hour, Day, Month;
	WORD Year;
	DWORD Incoming, Outgoing;
	WORD Time;
} HOURLYSTATS;
#pragma pack(pop)

typedef struct tagTimer
{
	DWORD TimeAtStart; // ����� � ������ ������� ������� - � �������������.
	DWORD Timer; // ���������� ������ �� ������� ������� �������.
} TIMER;

typedef struct
{
	char *name; // ��� ��������.

	TIMER Session; // ������ ������� ������ (�������� � �������).
	TIMER Total; // ������ �����.

	DWORD TotalRecvTraffic, // ����� ������ ��������� (�� ��������� ������)
		  TotalSentTraffic,
		  CurrentRecvTraffic, // ������� ������ ��������� (�� ������)
		  CurrentSentTraffic;
	union
	{
		BYTE Flags;
		struct
		{
			unsigned int Reserv0:1; // ���������� �������� ����� - ���������� ������ �� ���� ���������.
			unsigned int Visible:1; // = 1 - ������� ����� ������������ �� ������ ���������
			unsigned int Enabled:1; // = 1 - ������� ������� � �� ��������
			unsigned int State:1;   // = 1 - ������� ������ ������
			unsigned int Reserv1:3;
		};
	};

	// ��������� � ������ 0.1.1.0.
	DWORD NumberOfRecords; // ���������� ����� � ����� ����������.
	HOURLYSTATS *AllStatistics; // ������ ���������� ������ �� ����������� �������.
	HANDLE hFile; // ���� � ����������� ����������� ������� ���������.

	DWORD StartIndex; // ����� ������ � ����������, ������ ���������� �� ������ �������.
	DWORD StartIncoming; // �������� ��������� ������� �� ������ �������.
	DWORD StartOutgoing; // �������� ���������� ������� �� ������ �������.

	// 0.1.1.5.
	DWORD Shift;	// ����� ������ � ���������� ���������� ���������� ��������,
					// ���� ������� ������������� ������ ���������� ������� ��������.

	// 0.1.1.6
	wchar_t *tszAccountName; // ������������ ��� �������� ��� ������������� � ����������� ����������.
} PROTOLIST;

//---------------------------------------------------------------------------------------------
// ��������� �����
//---------------------------------------------------------------------------------------------
typedef union
{
	DWORD Flags;
	struct
	{
		unsigned int NotifyBySize:1;			//0
		unsigned int DrawCurrentTraffic:1;		//1
		unsigned int DrawTotalTraffic:1;		//2
		unsigned int DrawCurrentTimeCounter:1;	//3
		unsigned int DrawProtoIcon:1;			//4
		unsigned int Reserv0:1;					//5
		unsigned int DrawProtoName:1;			//6
		unsigned int DrawFrmAsSkin:1;			//7
		unsigned int ShowSummary:1;				//8
		unsigned int ShowTooltip:1;				//9
		unsigned int ShowMainMenuItem:1;		//10
		unsigned int ShowOverall:1;				//11
		unsigned int Stat_Units:2;				//12,13
		unsigned int Stat_Tab:3;				//14,15,16
		unsigned int NotifyByTime:1;			//17
		unsigned int Reserv2:1;					//18
		unsigned int PeriodForShow:2;			//19,20
		unsigned int FrameIsVisible:1;			//21
		unsigned int Reserv1:1;					//22
		unsigned int DrawTotalTimeCounter:1;	//23
	};
} uTCFLAGS;

extern HINSTANCE hInst;

extern HWND TrafficHwnd;
extern PROTOLIST *ProtoList;
extern uTCFLAGS unOptions;

extern int  Traffic_PopupBkColor;
extern int  Traffic_PopupFontColor;
extern char Traffic_Notify_time_value;
extern int  Traffic_Notify_size_value;
extern char Traffic_PopupTimeoutDefault;
extern char Traffic_PopupTimeoutValue;
extern char Traffic_AdditionSpace;

extern wchar_t Traffic_CounterFormat[512];
extern wchar_t Traffic_TooltipFormat[512];

extern BOOL bPopupExists, bVariablesExists, bTooltipExists;

extern BOOL UseKeyColor;
extern COLORREF KeyColor;

extern HGENMENU hTrafficMainMenuItem;

extern WORD Stat_SelAcc;
extern OPTTREE_OPTION *pOptions; // ��������� � ������ TrafficCounter.c.
extern PROTOLIST OverallInfo;

#endif