//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================

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


enum ELogonState
{
	k_ELogonStateNotLoggedOn = 0,
	k_ELogonStateLoggingOn = 1,
	k_ELogonStateLoggingOff = 2,
	k_ELogonStateLoggedOn = 3
};


// Enums for all personal questions supported by the system.
enum EPersonalQuestion
{
	// Never ever change these after initial release.
	k_EPSMsgNameOfSchool = 0,			// Question: What is the name of your school?
	k_EPSMsgFavoriteTeam = 1,			// Question: What is your favorite team?
	k_EPSMsgMothersName = 2,			// Question: What is your mother's maiden name?
	k_EPSMsgNameOfPet = 3,				// Question: What is the name of your pet?
	k_EPSMsgChildhoodHero = 4,			// Question: Who was your childhood hero?
	k_EPSMsgCityBornIn = 5,				// Question: What city were you born in?

	k_EPSMaxPersonalQuestion
};


// account flags (stored in DB)
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASEd
enum EAccountFlags
{
	m_EAccountFlagNormalUser = 0,				// Standard user level (yes, this is meant to be zero)
	k_EAccountFlagPersonaNameSet = ( 1 << 0 ),	// true if the user has set the persona name they really want, instead of the auto-generated one
	k_EAccountFlagUnbannable	= ( 1 << 1 ),	// whatever happens, this account can't be banned
	k_EAccountFlagPasswordSet	= ( 1 << 2 ),	// we've set the password at least once on this account
	k_EAccountFlagSupport = ( 1 << 3 ),			// Enables use of web support tool
	k_EAccountFlagAdmin = ( 1 << 4 ),			// The name says it all, can do everything
	k_EAccountFlagSupervisor = ( 1 << 5 ),		// support supervisory role
	k_EAccountFlagAppEditor = ( 1 << 6 ),		// Can edit app info
	k_EAccountFlagHWIDSet = ( 1 << 7 ),			// Set HWID once
	k_EAccountFlagPersonalQASet = ( 1 << 8 ),	// user has personal Question & anser set
	k_EAccountFlagVacBeta = ( 1 << 9 ),			// user participates in VAC beta tests
	k_EAccountFlagDebug = ( 1 << 10 ),			// user is in debug mode, eg VAC doesn't kick etc
	k_EAccountFlagDisabled = ( 1 << 11 ),		// account is disabled.
	k_EAccountFlagLimitedUser = ( 1 << 12 ),	// account is limited user account because it doesnt own anything
	k_EAccountFlagLimitedUserForce = ( 1 << 13 ),	// account is limited user account because we forced it to be
	k_EAccountFlagEmailValidated = ( 1 << 14 ),		// user has verified email address via WG
	k_EAccountFlagMarketingTreatment = ( 1 << 15),		// account is flagged as being in a treatment for marketing/sales experiments
};

// profile state (stored in DB)
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ECommunityProfileState
{
	k_ECommunityProfileNotCreated = 0, // user hasn't setup community account yet
	k_ECommunityProfileActive = 1,	// user joined community, site is public
	k_ECommunityProfilePrivate = 2,	// user joined community, site is private
	k_ECommunityProfileLocked = 3,	// user got locked, content can't be changed but is still accessible
	k_ECommunityProfileDisabled = 4, // user got disabled, site not accessible anymore
};


// profile privacy option setting (stored in DB)
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ECommunityPrivacyState
{
	k_ECommunityPrivacyInvalid = 0,
	k_ECommunityPrivacyPrivate = 1,			// ain't nobody can see it
	k_ECommunityPrivacyFriendsOnly = 2,		// only your friends can see it
	k_ECommunityPrivacyPublic = 3,			// anybody could see it
};

enum ECommunityVisibilityState
{
	k_ECommunityVisibilityPrivate = 1,			// private, requester see only public fields
	k_ECommunityVisibilityFriendsOnly = 2,		// friends only, requester sees only public fields
	k_ECommunityVisibilityOpen = 3,				// it is visible to requester; they are owner or friend or public
	k_ECommunityVisibilitySupportPrivate = 4,	// was private, but it's a support account asking
	k_ECommunityVisibilitySupportFriendsOnly = 5,// was friends only, but it's a support account asking
};

enum ECommentPermission
{
	k_ECommentPermissionFriendsOnly = 0,		// only friends can leave a comment
	k_ECommentPermissionAnyone = 1,				// anybody can leave a comment
	k_ECommentPermissionSelfOnly = 2,			// only the account owner can leave a comment
};

// Payment methods for purchases - BIT FLAGS so can be used to indicate
// acceptable payment methods for packages
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum EPaymentMethod
{
	k_EPaymentMethodNone			= 0x000,		// user got the license for free
	k_EPaymentMethodActivationCode	= 0x001,		// user paid by entering unused CD-Key or other activation code
	k_EPaymentMethodCreditCard		= 0x002,		// user paid with credit card
	k_EPaymentMethodPayPal			= 0x004,		// user paid with via paypal
	k_EPaymentMethodGuestPass		= 0x008,		// user paid by redeeming a guest pass
	k_EPaymentMethodHardwarePromo	= 0x010,		// user presented machine credentials
	k_EPaymentMethodClickAndBuy		= 0x020,		// ClickandBuy
	k_EPaymentMethodAutoGrant		= 0x040,		// server side purchased package, things like German specific TF2 free weekend
	k_EPaymentMethodWallet			= 0x080,		// user paid with wallet
	k_EPaymentMethodOEMTicket		= 0x100,		// user paid by redeeming a OEM license ticket
	k_EPaymentMethodSplit			= 0x200,		// user paid with wallet AND a provider
};

// Sources for WalletTxn records
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum EWalletSource
{
	k_EWalletSourceInvalid = 0,
	k_EWalletSourcePurchase = 1,					// Created from a purchase, refund, chargeback, or reverse chargeback (PurchaseRefGID -> TransID)
	k_EWalletSourceGuestPass = 2,					// Created from a guest pass (PurchaseRefGID -> GuestPassID)
	k_EWalletSourceConversion = 3,					// Created from a wallet conversion (PurchaseRefGID -> GID shared between debit & credit records)
	k_EWalletSourceRebate = 4,						// Created from a rebate (PurchaseRefGID -> TransID)
};

// License types
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ELicenseType
{
	k_ENoLicense = 0,								// for shipped goods
	k_ESinglePurchase = 1,							// single purchase
	k_ESinglePurchaseLimitedUse = 2,				// single purchase w/ expiration
	k_ERecurringCharge = 3,							// recurring subscription
	k_ERecurringChargeLimitedUse = 4,				// recurring subscription w/ limited minutes per period
	k_ERecurringChargeLimitedUseWithOverages = 5,	// like above but w/ soft limit and overage charges
};

// Flags for licenses - BITS
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ELicenseFlags
{
	k_ELicenseFlagNone	= 0x00,				// just a place holder
	k_ELicenseFlagRenew = 0x01,				// Renew this license next period
	k_ELicenseFlagRenewalFailed = 0x02,		// Auto-renew failed
	k_ELicenseFlagPending = 0x04,			// Purchase or renewal is pending
	k_ELicenseFlagExpired = 0x08,			// Set if no longer active (whatever the reason)
	k_ELicenseFlagCancelledByUser = 0x10,	// Cancelled by the user
	k_ELicenseFlagCancelledByAdmin = 0x20,	// Cancelled by customer support
	k_ELicenseFlagLowViolenceContent = 0x40,// license is for low violence content
};

// Status of a package
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum EPackageStatus
{
	k_EPackageAvailable = 0,		// Available for purchase and use
	k_EPackagePreorder = 1,			// Available for purchase, as a pre-order
	k_EPackageUnavailable = 2,		// Not available for new purchases, may still be owned
	k_EPackageInvalid = 3,			// Either an unknown package or a deleted one that nobody should own
};

// Purchase status
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum EPurchaseStatus
{
	k_EPurchasePending = 0,			// purchase is pending, valid but pending subscription
	k_EPurchaseSucceeded = 1,		// purchase successful, valid subscription
	k_EPurchaseFailed = 2,			// purchase failed, no subscription
	k_EPurchaseRefunded = 3,		// we refunded the purchase and removed subscription
	k_EPurchaseInit = 4,			// user started purchase
	k_EPurchaseChargedback = 5,		// the user issued a chargeback, we removed subscription 
	k_EPurchaseRevoked = 6,			// we revoked the purchase and removed subscription. Usually stolen CD-Keys
	k_EPurchaseInDispute = 7,		// the purchase is being disputed by the user, preliminary to a chargeback 
};

// LineItemTypes
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASEd
enum ELineItemType
{
	k_ELineItemTypeInvalid = 0,					// Unknown - load all purchase line items
	k_ELineItemTypeMicroTxn = ( 1 << 0 ),		// Transaction has data in MicroTxnLineItem table
	k_ELineItemTypeWallet = ( 1 << 1 ),			// Transaction has data in WalletLineItem table
	k_ELineItemTypePkg = ( 1 << 2 ),			// Transaction has data in PurchaseLineItem table
};

// Enum for the types of news push items you can get
enum ENewsUpdateType
{
	k_EAppNews = 0,	 // news about a particular app
	k_ESteamAds = 1, // Marketing messages
	k_ESteamNews = 2, // EJ's corner and the like
	k_ECDDBUpdate = 3, // backend has a new CDDB for you to load
	k_EClientUpdate = 4,	// new version of the steam client is available
};

// Detailed purchase result codes for the client
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum EPurchaseResultDetail 
{
	k_EPurchaseResultNoDetail = 0,
	k_EPurchaseResultAVSFailure = 1,
	k_EPurchaseResultInsufficientFunds = 2,
	k_EPurchaseResultContactSupport = 3,
	k_EPurchaseResultTimeout = 4,

	k_EPurchaseResultInvalidPackage = 5,
	k_EPurchaseResultInvalidPaymentMethod = 6,
	k_EPurchaseResultInvalidData = 7,
	k_EPurchaseResultOthersInProgress = 8,
	k_EPurchaseResultAlreadyPurchased = 9,
	k_EPurchaseResultWrongPrice = 10,
	k_EPurchaseResultFraudCheckFailed = 11,
	k_EPurchaseResultCancelledByUser = 12,
	k_EPurchaseResultRestrictedCountry = 13,
	k_EPurchaseResultBadActivationCode = 14,		// this code gives no receipt
	k_EPurchaseResultDuplicateActivationCode = 15,

	k_EPurchaseResultUseOtherPaymentMethod = 16,	// User should try a different payment method
	k_EPurchaseResultUseOtherFundingSource = 17,	// Select a different funding source (paypal)
	k_EPurchaseResultInvalidShippingAddress = 18,	// Shipping address is invalid (paypal)
	k_EPurchaseResultRegionNotSupported = 19,		// This region is not supported with this payment type

	k_EPurchaseResultAcctIsBlocked = 20,			// Acct has been blocked by provider - user should contact provider to resolve
	k_EPurchaseResultAcctNotVerified = 21,			// Provider indicated account needs to be verified for transaction to complete

	k_EPurchaseResultInvalidAccount = 22,			// Provider indicated the account is invalid or no longer usable
	k_EPurchaseResultStoreBillingCountryMismatch = 23,	// store country code & billing country code do not match
	k_EPurchaseResultDoesNotOwnRequiredApp = 24,		// user does not own one of the apps required for purchase
	k_EPurchaseResultCanceledByNewTransaction = 25,		// user made a new transaction which canceled an old, pending transaction
	k_EPurchaseResultForceCanceledPending = 26,			// A pending transaction was force canceled (no response from provider)
	k_EPurchaseResultFailCurrencyTransProvider = 27,	// selected transaction provider does not support calculated currency
	k_EPurchaseResultFailedCyberCafe = 28,				// cybercafe account tried to purchase or use an activation code

	k_EPurchaseResultNeedsPreApproval = 29,				// Transaction needs approval from support
	k_EPurchaseResultPreApprovalDenied = 30,			// Transaction was denied by support
	k_EPurchaseResultWalletCurrencyMismatch = 31,		// Currency of purchase does not match currency of wallet
};

// Type of system IM.  The client can use this to do special UI handling in specific circumstances
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ESystemIMType
{
	k_ESystemIMRawText = 0,
	k_ESystemIMInvalidCard = 1,
	k_ESystemIMRecurringPurchaseFailed = 2,
	k_ESystemIMCardWillExpire = 3,
	k_ESystemIMSubscriptionExpired = 4,
	k_ESystemIMGuestPassReceived = 5, // User has received a guest pass from a friend
	k_ESystemIMGuestPassGranted = 6, // System has granted a user a guest pass to give out
	k_ESystemIMGiftRevoked = 7,			// We revoked a gift due to chargeback, etc

	//
	k_ESystemIMTypeMax
};

// Ways an external cd key can be munged onto a users PC
enum ELegacyKeyRegistrationMethod
{
	eLegacyKeyRegistrationMethodNone = 0, // doesn't support legacy cd keys
	eLegacyKeyRegistrationMethodRegistry, // just place it into the registry
	eLegacyKeyRegistrationMethodDisk, // put it in a file on disk
};

// Support events, generated by system or support input
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ESupportEvent
{
	// support activity
	eSupportNote = 0,			// a generic support note
	eSupportLogin = 1,			// support account logged in out, data: IP:Port
	eSupportLogoff = 2,			// support account logged out, text: IP:Port
	eSupportTicketCreated = 3,	// a support ticket was created
	eSupportTicketClosed = 4,	// problem was solved, ticket closed

	// account changes
	eSupportEnableAccount = 5,		// support enabled account, text: reason
	eSupportDisableAccount = 6,		// support disabled account, text: reason
	eSupportChangeAccountPassword = 7,	// support or user changed password, data: DONT include old password
	eSupportChangeAccountEmail = 8,		// support or user changed email, data: old email
	eSupportChangeAccountName = 9,		// support or user changed name, data: old name
	eSupportChangeAccountPlayer = 10,	// support or user changed player name, data: old name

	eSupportPurchaseChargedback = 11,	// a charge back was issued
	eSupportPurchaseRefunded = 12,		// a refund was issued
	eSupportPurchaseForcedCompletion = 13, // support forced a pending purchase to complete

	// license handling
	eSupportLicenseAdded = 14,		// support added a license, text: reason
	eSupportLicenseCanceled = 15,	// support or user cancel a license	
	eSupportLicenseChanged = 16,	// support removed a license, text: reason
	eSupportBannedGame = 17,		// support banned game for an account
	eSupportUnbannedGame = 18,		// support unbanned game for an account

	// purchase activity
	eSupportRunPurchase = 19,
	eSupportChangedCreditCard = 20,		// support updated a credit card 
	eSupportSetNoFraudCheckFlag = 21,	// support disabled fraud check, data: reason

	// banning
	eSupportBannedCreditCard = 22,	// support banned a credit card
	eSupportBannedIP = 23,			// support banned an IP
	eSupportBannedCDKey = 24,		// support banned an CDKey
	eSupportBannedCountry = 25,		// support banned a country
	eSupportBannedPayPalAccount = 26,

	eSupportPurchaseCanceled = 27,	// support forced a pending purchase to cancel

	eSupportChangeAvatar = 28,
	eSupportChangeProfileURL = 29,

	eSupportRegisterCDKey = 30,			// support added a CD key to this account
	eSupportGrantGuestPass = 31,		// support granted a guest pass to this account
	eSupportResubmitTransaction = 32,	// support resubmitted a transaction

	eSupportResetContent = 33,			// reset user content based on abuse reports
	eSupportLockProfile = 34,			// temp block a user from modifying community content
	eSupportSetCommunityState = 35,		// perm lock a user profile, can't be modified
	eSupportDeleteAbuseReports = 36,	// deleted abuse reports for the SteamID
	eSupportSetAccountFlags = 37,		// changed account flags

	eSupportChargebackStatusUpdate = 38,	// support updated the pending chargeback status

	eSupportRefundForcedCompletion = 39,	// support forced a pending refund to complete
	eSupportRefundCanceled = 40,			// support forced a pending refund to cancel

	eSupportRevokeActivationKey = 41,		// support revoked and unlocked activation key
	eSupportReverseChargeback = 42,			// a charge back was reversed
	eSupportRejectedActivationKey = 43,		// activation key was rejected (invalid or already used)

	eSupportPurchaseError = 44,				// Purchase error
	eSupportAudited			= 45,

	// items
	eSupportBanItems = 46,					// support banned a user's items
	eSupportRestoreBannedItems = 47,		// support restored banned items
	eSupportRestoreDeletedItems = 48,		// support restored deleted items

	// comments
	eSupportDeleteComments = 49,			// cleared comments on this account (not written by this account)

	eSupportDeleteItems = 50,				// support deleted a user's items
	eSupportDeleteCachedCard = 51,			// support deleted a user's cached credit card

	eSupportConvertedWallet = 52,			// user's wallet was converted

	eSupportTxnApproved = 53,				// PreApproval granted
	eSupportTxnDenied = 54,					// PreApproval denied

	eSupportGCAction = 55,					// used for all support actions from the GC
};


// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ESupportTicket
{
	// all kinds of problems tickets that have to be handled by support
	k_ETicketUnknown = 0,		// an unknown problem. yay.
	k_ETicketManual = 1,		// a problem manually entered by support. 
	k_ETicketFraudRedFlag = 2,	// fraud detection marked this account 
	k_ETicketPurchaseError = 3,	// a purchase error happened 
	k_ETicketChargeback = 4,	// a chargeback needs attention 
};

// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ESupportTicketState
{
	// all kinds of problems tickets that have to be handled by support
	k_ETicketStateUnknown = 0,		// support issue state is unknown
	k_ETicketStateUnassigned = 1,	// support issue is 'open' but not assigned yet
	k_ETicketStateInProcess = 2,	// support issue is assigned to an support actor
	k_ETicketStateResolved = 3,		// support issue is fixed and closed 
	k_ETicketStateUnresolved = 4,	// support issue couldn't be fixed. closed anyway
	k_ETicketStateAutoClosed = 5,	// System closed the ticket automatically
};


//-----------------------------------------------------------------------------
// types of content that can be reported as abused
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum ECommunityContentType
{
	k_EContentUnspecified = 0,
	k_EContentAll = 1,			// reset all community content
	k_EContentAvatarImage = 2,  // clear avatar image
	k_EContentProfileText = 3,  // reset profile text
	k_EContentWebLinks = 4,		// delete web links
	k_EContentAnnouncement = 5,
	k_EContentEventText = 6,
	k_EContentCustomCSS = 7,
	k_EContentProfileURL = 8,	// delete community URL ID
	k_EContentComments = 9,		// just comments this guy has written
};


//-----------------------------------------------------------------------------
// types of reasons why a violation report was issued
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum EAbuseReportType
{
	k_EAbuseUnspecified = 0,
	k_EAbuseInappropriate = 1,	// just not ok to post
	k_EAbuseProhibited = 2,		// prohibited by EULA or general law
	k_EAbuseSpamming = 3,		// excessive spamming
	k_EAbuseAdvertisement = 4,	// unwanted advertisement
	k_EAbuseExploit = 5,		// content data attempts to exploit code issue
	k_EAbuseSpoofing = 6,		// user/group is impersonating an official contact
	k_EAbuseLanguage = 7,		// bad language
	k_EAbuseAdultContent = 8,	// any kind of adult material, references etc
	k_EAbuseHarassment = 9,		// harassment, discrimination, racism etc
};

//-----------------------------------------------------------------------------
// actions for a user within a clan for logging in the ClanHistory table
//-----------------------------------------------------------------------------

enum EClanAction
{
	k_EJoined = 1,					// joined the clan
	k_ELeft = 2,					// left the clan
	k_EPromoted = 3,				// promoted to officer	
	k_EDemoted = 4,					// demoted from officer
	k_EKicked = 5,					// kicked off the clan
	k_ECreated = 6,					// clan was created
	k_EInvited = 7,					// invited someone
	k_EEventCreated = 8,			// clan event created
	k_EEventUpdated = 9,			// clan event updated
	k_EEventDeleted = 10,			// clan event deleted
	k_EPermissionsChanged = 11,		// clan permissions were changed
	k_EAnnouncementCreated = 12,	// clan announcement created
	k_EAnnouncementUpdated = 13,	// clan announcement updated
	k_EAnnouncementDeleted = 14,	// clan announcement deleted
	k_EPOTWChanged = 15,			// changed the POTW
	k_ELinksChanged = 16,			// links changed
	k_EDetailsChanged = 17,			// details changed
	k_ESupportResetContent = 18,	// support reset some or all of the clan content
	k_ESupportLockedGroup = 19,		// support locked this clan, it can't be modified anymore
	k_ESupportUnlockedGroup = 20,	// support unlocked this clan
	k_ESupportChangedOwner = 21,	// support transfered ownership
	k_EMadePublic = 22,				// made from private into public
	k_EMadePrivate = 23,			// made from public into private
	k_ESupportDisabledGroup = 24,	// support disabled this group, nobody can see it anymore
	k_EKickedChat = 25,				// kicked from chat
	k_EBannedChat = 26,				// banned from chat
	k_EUnBannedChat = 27,			// un-banned from chat

	k_EHighestValidAction			// keep me updated, please!
};


//-----------------------------------------------------------------------------
// types of events for use in the Clan Event Type table
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum EClanEventType
{
	k_EOtherEvent = 1,
	k_EGameEvent = 2,
	k_EPartyEvent = 3,
	k_EMeetingEvent = 4,
	k_ESpecialCauseEvent = 5,
	k_EMusicAndArtsEvent = 6,
	k_ESportsEvent = 7,
	k_ETripEvent = 8,
	k_EChatEvent = 9,
	k_EGameReleaseEvent = 10,
};

//-----------------------------------------------------------------------------
// types of marketing messages displayed to users
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum EMarketingMessageType
{
	k_EMarketingMessageNowAvailable = 1,
	k_EMarketingMessageWeekendDeal = 2,
	k_EMarketingMessagePrePurchase = 3,
	k_EMarketingMessagePlayNow = 4,
	k_EMarketingMessagePreloadNow = 5,
	k_EMarketingMessageGeneral = 6,
	k_EMarketingMessageDemoQuit = 7,
	k_EMarketingMessageGifting = 8,
	k_EMarketingMessageEJsKorner = 9,
};

//-----------------------------------------------------------------------------
// types of associations a marketing message may have
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum EMarketingMessageAssociationType
{
	k_EMarketingMessageNoAssociation = 0,
	k_EMarketingMessageAppAssociation = 1,
	k_EMarketingMessageSubscriptionAssociation = 2,
	k_EMarketingMessagePublisherAssociation = 3,
	k_EMarketingMessageGenreAssociation = 4,
};

//-----------------------------------------------------------------------------
// Marketing message visibility
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
//-----------------------------------------------------------------------------
enum EMarketingMessageVisibility
{
	k_EMarketingMessageVisibleBeta = 1,
	k_EMarketingMessageVisiblePublic = 2,
};

//-----------------------------------------------------------------------------
// Structures used in multiple messages
//-----------------------------------------------------------------------------
// Purchase message constants
// WARNING: Do not change these if an instance of this record may exist in a database!!!
// BUGBUG derrick - Since these also define schema, they should be moved into steamschema.h
const int k_cchCCNumMax			= 16 + 1;
const int k_cchHolderNameMax	= 100 + 1;
const int k_cchExpYearMax		= 4 + 1;
const int k_cchExpMonthMax		= 2 + 1;
const int k_cchCVV2Max			= 4 + 1;
const int k_cchAddressMax		= 128 + 1;
const int k_cchAddress2Max		= k_cchAddressMax;
const int k_cchCityMax			= 50 + 1;
const int k_cchPostcodeMax		= 16 + 1;
const int k_cchStateMax			= 32 + 1;
const int k_cchPhoneMax			= 20 + 1;
const int k_cchEmailMax			= 100 + 1;
const int k_cchCountryCodeMax	= 2 + 1;
const int k_cchPayPalCheckoutTokenMax = 20 + 1;
const int k_cchStateCodeMax		= 3 + 1;
const int k_cchCurrencyCodeMax	= 3 + 1;

const int k_cubMaxDfsURL = 128;				// Max size for URL descriptors on DFS


// License information
struct LicenseInfo_t
{
	PackageId_t m_unPackageID;
	RTime32 m_RTime32Created;
	RTime32 m_RTime32NextProcess;
	int32 m_nMinuteLimit;
	int32 m_nMinutesUsed;
	EPaymentMethod m_ePaymentMethod;
	uint32 m_nFlags;
	char m_rgchPurchaseCountryCode[k_cchCountryCodeMax];
	int32 m_nTerritoryCode;
};

// Supported Currency Codes
// WARNING: DO NOT RENUMBER EXISTING VALUES - STORED IN DATABASE
enum ECurrencyCode
{
	k_ECurrencyCodeInvalid = 0,
	k_ECurrencyCodeUSD = 1,
	k_ECurrencyCodeGBP = 2,
	k_ECurrencyCodeEUR = 3,

	k_ECurrencyCodeMax = 4
};

enum ETaxType
{
	k_ETaxTypeInvalid = 0,
	k_ETaxTypeUSState = 1,
	k_ETaxTypeVAT = 2
};

// client stat list
// needs to be kept in the same order, since it's part of the protocol
enum EClientStat
{
	k_EClientStatP2PConnectionsUDP = 0,
	k_EClientStatP2PConnectionsRelay = 1,
	k_EClientStatP2PGameConnections = 2,
	k_EClientStatP2PVoiceConnections = 3,
	
	k_EClientStatBytesDownloaded = 4,

	k_EClientStatMax,	// must be last, used as array's of data
};

enum EP2PState
{
	k_EP2PStateNotConnected,
	k_EP2PStateUDP,
	k_EP2PStateRelay,
};

// User response for authentication request
enum EMicroTxnAuthResponse
{
	k_EMicroTxnAuthResponseInvalid = 0,		// Invalid value
	k_EMicroTxnAuthResponseAuthorize = 1,	// user accepted microtransaction
	k_EMicroTxnAuthResponseDeny = 2,		// user denied microtransaction
	k_EMicroTxnAuthResponseAutoDeny = 3,	// client automatically denied microtransaction (user wasn't in game, etc.)
};

// Result of authorization request, returned to client
enum EMicroTxnAuthResult
{
	k_EMicroTxnAuthResultInvalid = 0,				// Invalid value
	k_EMicroTxnAuthResultOK = 1,					// Successfully authorized
	k_EMicroTxnAuthResultFail = 2,					// An error occurred
	k_EMicroTxnAuthResultInsufficientFunds = 3,		// User has insufficient funds to complete microtransaction
};

#endif