//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose: steam state machine that handles authenticating steam users
//
//=============================================================================//

#ifndef CL_STEAMUAUTH_H
#define CL_STEAMUAUTH_H
#ifdef _WIN32
#pragma once
#endif

#include "baseclient.h"
#include "utlvector.h"
#include "netadr.h"

#include "steam/steam_api.h"

class CSteam3Client : public CSteamAPIContext
{
public:
	CSteam3Client();
	~CSteam3Client();

	void Activate();
	void Shutdown();

	void GetAuthSessionTicket( void *pTicket, int cbMaxTicket, uint32 *pcbTicket, uint32 unIP, uint16 usPort, uint64 unGSSteamID, bool bSecure );
	void CancelAuthTicket();

	bool BGSSecure() { return m_bGSSecure; }
	void RunFrame();
#if !defined(NO_STEAM)
	STEAM_CALLBACK( CSteam3Client, OnClientGameServerDeny, ClientGameServerDeny_t, m_CallbackClientGameServerDeny );
	STEAM_CALLBACK( CSteam3Client, OnGameServerChangeRequested, GameServerChangeRequested_t, m_CallbackGameServerChangeRequested );
	STEAM_CALLBACK( CSteam3Client, OnGameOverlayActivated, GameOverlayActivated_t, m_CallbackGameOverlayActivated );
	STEAM_CALLBACK( CSteam3Client, OnPersonaUpdated, PersonaStateChange_t, m_CallbackPersonaStateChanged );
	STEAM_CALLBACK( CSteam3Client, OnLowBattery, LowBatteryPower_t, m_CallbackLowBattery );
#endif

private:

	//
	// Cached data for active ticket, if any
	//
	HAuthTicket m_hAuthTicket;
	uint32 m_unIP;
	uint16 m_usPort;
	bool m_bActive;
	bool m_bGSSecure;
	CSteamID m_steamIDGS;
	uint32 m_nTicketSize;
	unsigned char m_arbTicketData[ 1024 ];
};

#ifndef SWDS
// singleton accessor
CSteam3Client &Steam3Client();
#endif // SWDS

#endif // CL_STEAMUAUTH_H