#pragma once
#include "pch.h"
#include "interface/ipage.h"

enum class eTeleportType
{
    Marker,
    MapPosition,
    Coordinate,
};

class TeleportPage : public IPage<TeleportPage>
{
private:
    char m_LocBuf[INPUT_BUFFER_SIZE], m_InBuf[INPUT_BUFFER_SIZE];
    bool m_bInsertCoord;
    bool m_bTeleportMarker;
    bool m_bQuickTeleport;
    bool m_bSpawnUnderwater;
    ImVec2 m_fMapSize;
#ifdef GTASA

    DataStore m_SpriteData {"sprites"};

    /*
    	Generates radar sprite coordinates on the fly.
    	Shouldn't get saved in 'teleport.json', needs to be cleared at game shutdown.
    */
    void FetchRadarSpriteData();
#endif

public:
    ResourceStore m_locData{"locations", eResourceType::TYPE_TEXT};

    friend class IFeature;
    TeleportPage();
    TeleportPage(const TeleportPage&);

    void Draw();

    // Returns true if quick teleport feature is active
    bool IsQuickTeleportActive();

    // Callbacks
    void LocationAddNew();
    void LocationClick(str&, str&, str&);

    // Warp player to position, marker, map etc
    template<eTeleportType Type = eTeleportType::Coordinate>
    void WarpPlayer(CVector pos = CVector(0, 0, 0), int interiorID = 0);
};

extern TeleportPage& teleportPage;