/********************\
|  Copyright 2024,   |
|       Ulysse Cura  |
\********************/

/////////////////////////////////////////////////////////////////////////
//                                                                     //
//   Declaration de la classe TileMap, elle sert a charger tout ce     //
// qui est en rapport avec une map. (tileMap, entités, hitbox, etc...) //
//                                                                     //
/////////////////////////////////////////////////////////////////////////

#ifndef MAP_HPP
#define MAP_HPP

#include <SDL2/SDL.h>
#include <string>
#include <unordered_map>
#include <vector>
#include "Vector2D.hpp"

#define TILE_SIZE 16
#define TILEMAP_SCALE 2

using std::string, std::vector, std::unordered_map;

using TileID = int;

struct NextMap {
    string path;
    Vector2D<float> playerInitPos;
};

class TileMap {
  public:
    TileMap() = default;
    ~TileMap();

    void LoadTileMap(const string &);
    void LoadNextMap(int);
    void LoadTileset(const string &);
    void draw(int);

    Vector2D<float> getPlayerInitPos();

    int tileMapWidth, tileMapHeight;
    int worldWidth, worldHeight;

    vector<int> hitboxes;

  private:
    void m_draw(const vector<TileID> &);

    vector<TileID> m_tilesLayer1;
    vector<TileID> m_tilesLayer2;
    vector<TileID> m_tilesLayer3;

    int m_tilesetWidth, m_tilesetHeight;
    SDL_Texture *m_tileset;

    Vector2D<float> m_playerInitPos;

    unordered_map<int, NextMap> m_nextMaps;
};

#endif
