// Created by spenc on 5/14/2025.


#ifndef LAYER_H
#define LAYER_H

#include <cstdint>
#include <string>
#include <utility>

namespace OX
{
    class Core;


    class Layer
    {
    public:
        explicit Layer(std::string name = "New Layer")
            : m_name(std::move(name))
        {
        }

        explicit Layer(const char *name)
            : m_name(name)
        {

        }

        virtual ~Layer() = default;

        virtual void Init(Core &core) = 0;

        virtual void Update(Core &core) = 0;

        virtual void Draw(Core &core) = 0;

        virtual void Shutdown(Core &core) = 0;

        [[nodiscard]] const std::string &GetName() const { return m_name; }

    protected:
        std::string m_name;
    };
};

#endif // LAYER_H
