#pragma once

#include "Transformable.hpp"
#include "Types.hpp"
#include "interfaces/IRenderer.hpp"
#include <vector>
#include "interfaces/IIdentifyable.hpp"

namespace TSE
{
    class Layer : public IIdentifyable
    {
        private:
            string name;
            std::vector<Transformable*> objectsToRender;
            bool nonVisual = false;
        
        public:
            Layer(const string& name);

            void Render(IRenderer& rnd) const;
            void AddTransformable(Transformable* t);
            bool HasTransformable(const Transformable* t) const;

            void RemoveTransformable(const Transformable* t);
            void RemoveTransformable(const uuids::uuid id);

            string GetName() const;
            void SetName(const string& name);
            std::vector<Transformable*>& GetAllObjects();
            void Update();
            void SetNonVisual(bool v);
            bool IsVisual();
    };
} // namespace TSE
