#pragma once

// C++
#include <cstdint>

class dLogger;

/*!
  \file ObjectIDManager.hpp
  \brief A manager that handles requests for object IDs
 */

//! The Object ID Manager
class ObjectIDManager {
private:
	dLogger* mLogger;
    static ObjectIDManager * m_Address;         //!< The singleton instance
    
    uint32_t currentPersistentID;               //!< The highest current persistent ID in use
    
public:
    
    //! Return the singleton if it is initialized
    static ObjectIDManager* TryInstance() {
        return m_Address;
    }

    //! The singleton method
    static ObjectIDManager * Instance() {
        if (m_Address == nullptr) {
            m_Address = new ObjectIDManager;
        }
        
        return m_Address;
    }
    
    //! Initializes the manager
    void Initialize(dLogger* logger);
    
    //! Generates a new persistent ID
    /*!
      \return The new persistent ID
     */
    uint32_t GeneratePersistentID(void);

    void SaveToDatabase();
};