#ifndef BREEZE_MAP_H
#define BREEZE_MAP_H

#include "tileset.h"

#define BZ_MAX_MAP_LAYERS 16
#define BZ_MAX_MAP_TILESETS 8


typedef struct BzTileLayer {
    i32 id;

    int16_t *data;
    i32 dataCount;
    i16 minData;
    i16 maxData;

    i32 width;
    i32 height;

    f32 offsetX;
    f32 offsetY;
    f32 opacity;

    i32 tilesetIdx;
} BzTileLayer;


typedef struct BzTileMapDesc {
    const char *path;
    BzTileset tilesets[BZ_MAX_MAP_TILESETS];
    i32 tilesetCount;
} BzTileMapDesc;

typedef struct BzTileMap {
    Color backgroundColor;

    i32 width;
    i32 height;
    i32 tileWidth;
    i32 tileHeight;

    BzTileLayer layers[BZ_MAX_MAP_LAYERS];
    i32 layerCount;

    BzTileset tilesets[BZ_MAX_MAP_TILESETS];
    i32 tilesetCount;

    bool isValid;
} BzTileMap;

extern BzTileMap BZ_TILEMAP_INVALID;

int16_t bzTileLayerGetTile(BzTileLayer *layer, i32 x, i32 y);

BzTileMap bzTileMapCreate(const BzTileMapDesc *desc);
void bzTileMapDraw(BzTileMap *map);
void bzTileMapDestroy(BzTileMap *tilemap);



#endif //BREEZE_MAP_H
