#ifndef MINIMAP_HPP_INCLUDED
#define MINIMAP_HPP_INCLUDED

#include "../../Core/Types/Tile.hpp"
#include "../../Core/Types/Point.hpp"
#include "../../Core/Classes/Region.hpp"
#include <cstdint>

/** @addtogroup Interfaces
* @{ */
class Minimap
{
    public:
        /**
         * @brief Returns the middle point of the minimap
         *
         * @return the middle point of the minimap
         */
        static Point GetMiddle();
        /**
         * @brief Returns the plane the local player is on
         *
         * @return the plane the local player is on
         */
        static std::int32_t GetPlane();
        /**
         * @brief Returns the tile the local player is on
         *
         * @return the tile the local player is on
         */
        static Tile GetPosition();
        /**
         * @brief Returns the tile of the local players destination
         *
         * @return the tile of the local players destination
         */
        static Tile GetDestination();

        /**
         * @brief Returns true if the local players position is close to the passed tile, uses pixels as distance
         *
         * @param T tile to check
         * @param Distance in pixels
         * @return true if the local players position is close to the passed tile
         */
        static bool IsCloseTo(const Tile& T, std::int32_t Distance);
        /**
         * @brief Returns true if the passed tile is on the minimap
         *
         * @param T tile to check
         * @return true if the passed tile is on the minimap
         */
        static bool IsTileOn(const Tile& T);

        /**
         * @brief Clicks on the minimap compass to quickly face North
         *
         * @return true if the function succesfully clicks the compass, and the camera angle is 0 / North
         */
        static bool ClickCompass(); // Clicks north

        /**
         * @brief Clicks the quick-prayer orb
         *
         * @return true if the function succesfully clicked the orb
         */
        static bool ClickQuickPrayer();

        /**
         * @brief Clicks the toggle-run orb
         *
         * @return true if the function succesfully clicked the orb
         */
        static bool ClickToggleRun();

        static bool ClickTile(const Tile& T, std::int32_t Random = 5);

        static bool WalkPath(const std::vector<Tile>& Path, std::int32_t Distance, std::int32_t Random);

        static bool IsReachable(const Tile& T);

};

/** @} */

#endif // MINIMAP_HPP_INCLUDED
