/******************************************************************************
*	File		-	world.h
*	Author		-	Joey Pollack
*	Date		-	2022/06/28 (y/m/d)
*	Mod Date	-	2022/06/28 (y/m/d)
*	Description	-	Editor asset for a World object
******************************************************************************/

#ifndef LUNARIUM_EDITOR_WORLD_H_
#define LUNARIUM_EDITOR_WORLD_H_

#include "editor_asset.h"

#include <utils/uuid.h>
#include <filesystem>

namespace lunarium 
{
    class World;
}

namespace lunarium { namespace editor
{

    class World : public EditorAsset
    {
    public:
        World(std::filesystem::path name = "WORLD");
        ~World();

        [[nodiscard]] virtual OpRes LoadRawFile();
        [[nodiscard]] virtual OpRes Serialize(nlohmann::ordered_json& node);
        [[nodiscard]] virtual OpRes Deserialize(nlohmann::ordered_json& node);
        [[nodiscord]] virtual bool IsValidNode(nlohmann::ordered_json& node);
        [[nodiscard]] virtual nlohmann::ordered_json AsJSON();
        
        bool DrawProperties();

        lunarium::World* GetWorld();
        void UnloadWorld();
        OpRes LoadWorld();

    private: // DATA
        lunarium::World* mpWorld;

    private:
        


    private: // DISABLED
        World(const World&) = delete;
        World& operator=(const World&) = delete;
    };

}}


#endif  // LUNARIUM_EDITOR_WORLD_H_