#pragma once

namespace steam {
class friends {
protected:
  ~friends() = default;

public:
  virtual const char* GetPersonaName();
  virtual void SetPersonaName(const char* pchPersonaName);
  virtual int GetPersonaState();
  virtual int GetFriendCount(int eFriendFlags);
  virtual steam_id GetFriendByIndex(int iFriend, int iFriendFlags);
  virtual int GetFriendRelationship(steam_id steamIDFriend);
  virtual int GetFriendPersonaState(steam_id steamIDFriend);
  virtual const char* GetFriendPersonaName(steam_id steamIDFriend);
  virtual bool GetFriendGamePlayed(steam_id steamIDFriend,
                                   void* pFriendGameInfo);
  virtual const char* GetFriendPersonaNameHistory(steam_id steamIDFriend,
                                                  int iPersonaName);
  virtual bool HasFriend(steam_id steamIDFriend, int eFriendFlags);
  virtual int GetClanCount();
  virtual steam_id GetClanByIndex(int iClan);
  virtual const char* GetClanName(steam_id steamIDClan);
  virtual const char* GetClanTag(steam_id steamIDClan);
  virtual int GetFriendCountFromSource(steam_id steamIDSource);
  virtual steam_id GetFriendFromSourceByIndex(steam_id steamIDSource,
                                              int iFriend);
  virtual bool IsUserInSource(steam_id steamIDUser, steam_id steamIDSource);
  virtual void SetInGameVoiceSpeaking(steam_id steamIDUser, bool bSpeaking);
  virtual void ActivateGameOverlay(const char* pchDialog);
  virtual void ActivateGameOverlayToUser(const char* pchDialog,
                                         steam_id steamID);
  virtual void ActivateGameOverlayToWebPage(const char* pchURL);
  virtual void ActivateGameOverlayToStore(unsigned int nAppID);
  virtual void SetPlayedWith(steam_id steamIDUserPlayedWith);
  virtual void ActivateGameOverlayInviteDialog(steam_id steamIDLobby);
  virtual int GetSmallFriendAvatar(steam_id steamIDFriend);
  virtual int GetMediumFriendAvatar(steam_id steamIDFriend);
  virtual int GetLargeFriendAvatar(steam_id steamIDFriend);
  virtual bool RequestUserInformation(steam_id steamIDUser,
                                      bool bRequireNameOnly);
  virtual unsigned __int64 RequestClanOfficerList(steam_id steamIDClan);
  virtual steam_id GetClanOwner(steam_id steamIDClan);
  virtual int GetClanOfficerCount(steam_id steamIDClan);
  virtual steam_id GetClanOfficerByIndex(steam_id steamIDClan, int iOfficer);
  virtual int GetUserRestrictions();
  virtual bool SetRichPresence(const char* pchKey, const char* pchValue);
  virtual void ClearRichPresence();
  virtual const char* GetFriendRichPresence(steam_id steamIDFriend,
                                            const char* pchKey);
  virtual int GetFriendRichPresenceKeyCount(steam_id steamIDFriend);
  virtual const char* GetFriendRichPresenceKeyByIndex(steam_id steamIDFriend,
                                                      int iKey);
  virtual bool InviteUserToGame(steam_id steamIDFriend,
                                const char* pchConnectString);
  virtual int GetCoplayFriendCount();
  virtual steam_id GetCoplayFriend(int iCoplayFriend);
  virtual int GetFriendCoplayTime(steam_id steamIDFriend);
  virtual unsigned int GetFriendCoplayGame(steam_id steamIDFriend);
};
} // namespace steam
