#include "rive/bones/weight.hpp"
#include "rive/container_component.hpp"
#include "rive/shapes/vertex.hpp"

using namespace rive;

StatusCode Weight::onAddedDirty(CoreContext* context) {
    StatusCode code = Super::onAddedDirty(context);
    if (code != StatusCode::Ok) {
        return code;
    }
    if (!parent()->is<Vertex>()) {
        return StatusCode::MissingObject;
    }

    parent()->as<Vertex>()->weight(this);

    return StatusCode::Ok;
}

static int encodedWeightValue(unsigned int index, unsigned int data) {
    return (data >> (index * 8)) & 0xFF;
}

Mat2D Weight::deform(unsigned int indices,
                     unsigned int weights,
                     const float* boneTransforms) {
    float xx = 0, xy = 0, yx = 0, yy = 0, tx = 0, ty = 0;
    for (int i = 0; i < 4; i++) {
        int weight = encodedWeightValue(i, weights);
        if (weight == 0) {
            continue;
        }

        float normalizedWeight = weight / 255.0f;
        int index = encodedWeightValue(i, indices);
        int startBoneTransformIndex = index * 6;
        xx += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
        xy += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
        yx += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
        yy += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
        tx += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
        ty += boneTransforms[startBoneTransformIndex++] * normalizedWeight;
    }
    return Mat2D(xx, xy, yx, yy, tx, ty);
}
