//
// Created by slinky on 5/7/26.
//

#ifndef B_ENGINE_COMPONENTS_H
#define B_ENGINE_COMPONENTS_H

#include "Model.h"

#include "entt/entt.hpp"
#include "glm/glm.hpp"
#include "glm/ext/matrix_transform.hpp"

namespace Components {
    struct Transform {
        glm::vec3 position{};
        glm::vec3 rotation{};
        glm::vec3 scale{};
        glm::mat4 model = glm::identity<glm::mat4>();
        bool dirty {true};
    };

    struct Relationship {
        entt::entity parent {entt::null};
        entt::entity first_child {entt::null};
        entt::entity prev_sibling {entt::null};
        entt::entity next_sibling {entt::null};
    };

    struct Drawable {
        std::shared_ptr<Model> model {nullptr};
    };

    struct DirectionalLight {
        glm::vec3 direction{};
        glm::vec3 ambient{};
        glm::vec3 diffuse{};
        glm::vec3 specular{};
    };

    struct Tag {
        std::string name;
    };
}


#endif //B_ENGINE_COMPONENTS_H