/*==LICENSE==*

CyanWorlds.com Engine - MMOG client, server and tools
Copyright (C) 2011  Cyan Worlds, Inc.

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 3 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, see <http://www.gnu.org/licenses/>.

You can contact Cyan Worlds, Inc. by email legal@cyan.com
 or by snail mail at:
      Cyan Worlds, Inc.
      14617 N Newport Hwy
      Mead, WA   99021

*==LICENSE==*/
/*****************************************************************************
*
*   $/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultConstants.h
*   
***/

#ifdef PLASMA20_SOURCES_PLASMA_PUBUTILLIB_PLVAULT_PLVAULTCONSTANTS_H
#error "Header $/Plasma20/Sources/Plasma/PubUtilLib/plVault/plVaultConstants.h included more than once"
#endif
#define PLASMA20_SOURCES_PLASMA_PUBUTILLIB_PLVAULT_PLVAULTCONSTANTS_H


////////////////////////////////////////////////////////////////////
// plVault: Plasma Network File System
//

class plAgeInfoSource;


////////////////////////////////////////////////////////////////////

namespace plVault {
    // ONLY APPEND TO THIS ENUM.
    // Many of these values are stored in db.
    // These are also commonly used as the Initialized Contexts in various node init tasks.
    // These values may not change unless all clients, servers, and databases are simultaneously
    // replaced; so forget it, basically. =)
    enum StandardNodes {
        // Just a node.
        kUserDefinedNode = 0,
        // Every vnode mgr has an inbox.
        kInboxFolder,
        // player buddies list.
        kBuddyListFolder,
        // player ignore list.
        kIgnoreListFolder,
        // people I know about folder.
        kPeopleIKnowAboutFolder,
        // vault manager place to store its stuff.
        kVaultMgrGlobalDataFolder,
        // player chronicle.
        kChronicleFolder,
        // player avatar outfit.
        kAvatarOutfitFolder,
        // player Age Type Journals.
        kAgeTypeJournalFolder,
        // age Sub Ages list.
        kSubAgesFolder,
        // an imager's inbox.
        kDeviceInboxFolder,
        // hood members folder.
        kHoodMembersFolder,     // DO NOT DELETE without MarkD's permission.
        // all players folder.
        kAllPlayersFolder,
        // folder for keeping age members in
        kAgeMembersFolder,
        // List of player's KI Age journals.
        kAgeJournalsFolder,
        // an age's list of devices (imagers, whatever).
        kAgeDevicesFolder,
        // an sdl node that applies to one specific instance of an age.
        kAgeInstanceSDLNode,
        // an sdl node that applies to all ages by the same filename.
        kAgeGlobalSDLNode,
        // people who are invited to visit an age
        kCanVisitFolder,
        // people who are owners of an age
        kAgeOwnersFolder,
        // global folder for game servers
        kAllAgeGlobalSDLNodesFolder,
        // a player's player info node. used in init task as the init context for the node
        kPlayerInfoNode,
        // global folder: ages that are public
        kPublicAgesFolder,
        // ages a player owns (personal age bookshelf comes from here)
        kAgesIOwnFolder,
        // ages a player can visit
        kAgesICanVisitFolder,
        // the player's closet
        kAvatarClosetFolder,
        // an age's info node. used in age init task.
        kAgeInfoNode,
        // the system status node
        kSystemNode,
        // a players invite keyring
        kPlayerInviteFolder,
        // CCR players folder
        kCCRPlayersFolder,
        // Global Inbox folder
        kGlobalInboxFolder,
        // Child Age folder node list
        kChildAgesFolder,
        // Game Scores folder
        kGameScoresFolder,
        // THIS MUST BE THE LAST ENUM VALUE
        kLastStandardNode,
    };

    // All possible node types.  These values may not change unless all clients,
    // servers, and databases are simultaneously replaced; so forget it, basically. =)
    enum NodeTypes {
        kNodeType_Invalid,
        kNodeType_VNodeMgrLow,  // low marker for range of VNodeMgr types
        kNodeType_VNodeMgrPlayer,
        kNodeType_VNodeMgrAge,
        kNodeType_VNodeMgr_UNUSED00,
        kNodeType_VNodeMgr_UNUSED01,
        kNodeType_VNodeMgr_UNUSED02,
        kNodeType_VNodeMgr_UNUSED03,
        kNodeType_VNodeMgrHigh = kNodeType_VNodeMgrLow + 20,    // high marker for range of VNodeMgr client types
        kNodeType_Folder,
        kNodeType_PlayerInfo,
        kNodeType_System,
        kNodeType_Image,
        kNodeType_TextNote,
        kNodeType_SDL,
        kNodeType_AgeLink,
        kNodeType_Chronicle,
        kNodeType_PlayerInfoList,
        kNodeType_UNUSED00,
        kNodeType_UNUSED01,
        kNodeType_AgeInfo,
        kNodeType_AgeInfoList,
        kNodeType_MarkerGame,
    };

    // All possible text note types
    enum NoteTypes {
        kNoteType_Generic,
        kNoteType_CCRPetition,
        kNoteType_Device,
        kNoteType_Invite,
        kNoteType_Visit,
        kNoteType_UnVisit,
        kNumNoteTypes
    };
    enum NoteSubTypes {
        kNoteSubType_Generic,
    };

//============================================================================


#ifdef CLIENT

    const char * NodeTypeStr( int type, bool pretty=false );
    const char * StandardNodeStr( int type );

#endif
};