#pragma once

#include <vector>

#include "game/gameplay/tile_collider.hpp"

/**
 * @brief Mapa de colisiones de una habitación
 *
 * Contiene el collision_tile_map (grid de tipos de tile) y el TileCollider
 * que proporciona queries de colisión directas contra el grid.
 */
class CollisionMap {
   public:
    CollisionMap(std::vector<int> collision_tile_map, int conveyor_belt_direction);
    ~CollisionMap() = default;

    CollisionMap(const CollisionMap&) = delete;
    auto operator=(const CollisionMap&) -> CollisionMap& = delete;
    CollisionMap(CollisionMap&&) = delete;
    auto operator=(CollisionMap&&) -> CollisionMap& = delete;

    [[nodiscard]] auto getTileCollider() const -> const TileCollider& { return tile_collider_; }
    [[nodiscard]] auto getConveyorBeltDirection() const -> int { return conveyor_belt_direction_; }
    [[nodiscard]] auto getCollisionTileMap() const -> const std::vector<int>& { return collision_tile_map_; }

   private:
    std::vector<int> collision_tile_map_;
    int conveyor_belt_direction_;
    TileCollider tile_collider_;
};
