#pragma once

#include <SDL3/SDL.h>
#include <SDL3_image/SDL_image.h>
#include <string>
#include <utils.hpp>

namespace Game::Renderer {
    class Texture {
        public:
            Texture(std::string id = "noname");
            Texture(const std::string& path, SDL_Renderer* renderer, std::string id = "noname");
            Texture(const Texture&);
            Texture& operator=(const Texture&);
            DISABLE_MOVE(Texture);
            virtual ~Texture();

            SDL_Texture* getSDLTexture();
            std::string getId();
            float getWidth();
            float getHeight();
            bool isTiled() { return mIsTiled; }
            void setTiled(bool tiled) { mIsTiled = tiled; }

        protected:
            SDL_Texture* mTex;
            std::string mId;
        private:
            bool mIsTiled = false; // Whether the texture is a tileset that should be rendered as a single tile or not
    };
}