#ifndef WORLDS_HPP_INCLUDED
#define WORLDS_HPP_INCLUDED

#include "../../Core/Classes/World.hpp"
#include <functional>
#include <cstdint>
#include <string>
#include <vector>

/** @addtogroup Tools
* @{ */
class Worlds
{
    public:
        static bool Refresh();

        static bool SwitchWorld(Internal::World World);
        static bool SwitchWorld(std::int32_t WorldID);

        static std::int32_t GetCurrent();
        static std::vector<Internal::World> GetAll();

        static std::int32_t GetIndexOf(Internal::World World);
        static std::int32_t GetIndexOf(std::int32_t WorldID);

        static std::vector<Internal::World> GetF2P();
        static std::vector<Internal::World> GetP2P();

        static bool IsP2P(Internal::World World);
        static bool IsP2P(std::int32_t WorldID);

        static Internal::World GetBy(std::int32_t WorldID);
        static std::vector<Internal::World> GetBy(const std::function<bool (Internal::World&)>& Filter);
};

/** @} */

#endif // WORLDS_HPP_INCLUDED
