#include "rive/animation/keyframe_interpolator.hpp"
#include "rive/core_context.hpp"
#include "rive/layout_component.hpp"
#include "rive/layout/layout_component_style.hpp"
#include <vector>

using namespace rive;

// ---- Flags 0
BitFieldLoc rive::DisplayBits = BitFieldLoc(0, 0);
BitFieldLoc rive::PositionTypeBits = BitFieldLoc(1, 2);
BitFieldLoc rive::FlexDirectionBits = BitFieldLoc(3, 4);
BitFieldLoc rive::DirectionBits = BitFieldLoc(5, 6);
BitFieldLoc rive::AlignContentBits = BitFieldLoc(7, 9);
BitFieldLoc rive::AlignItemsBits = BitFieldLoc(10, 12);
BitFieldLoc rive::AlignSelfBits = BitFieldLoc(13, 15);
BitFieldLoc rive::JustifyContentBits = BitFieldLoc(16, 18);
BitFieldLoc rive::FlexWrapBits = BitFieldLoc(19, 20);
BitFieldLoc rive::OverflowBits = BitFieldLoc(21, 22);
BitFieldLoc rive::IntrinsicallySizedBits = BitFieldLoc(23, 23);
BitFieldLoc rive::WidthUnitsBits = BitFieldLoc(24, 25);
BitFieldLoc rive::HeightUnitsBits = BitFieldLoc(26, 27);

// ---- Flags 1
BitFieldLoc rive::BorderLeftUnitsBits = BitFieldLoc(0, 1);
BitFieldLoc rive::BorderRightUnitsBits = BitFieldLoc(2, 3);
BitFieldLoc rive::BorderTopUnitsBits = BitFieldLoc(4, 5);
BitFieldLoc rive::BorderBottomUnitsBits = BitFieldLoc(6, 7);
BitFieldLoc rive::MarginLeftUnitsBits = BitFieldLoc(8, 9);
BitFieldLoc rive::MarginRightUnitsBits = BitFieldLoc(10, 11);
BitFieldLoc rive::MarginTopUnitsBits = BitFieldLoc(12, 13);
BitFieldLoc rive::MarginBottomUnitsBits = BitFieldLoc(14, 15);
BitFieldLoc rive::PaddingLeftUnitsBits = BitFieldLoc(16, 17);
BitFieldLoc rive::PaddingRightUnitsBits = BitFieldLoc(18, 19);
BitFieldLoc rive::PaddingTopUnitsBits = BitFieldLoc(20, 21);
BitFieldLoc rive::PaddingBottomUnitsBits = BitFieldLoc(22, 23);
BitFieldLoc rive::PositionLeftUnitsBits = BitFieldLoc(24, 25);
BitFieldLoc rive::PositionRightUnitsBits = BitFieldLoc(26, 27);
BitFieldLoc rive::PositionTopUnitsBits = BitFieldLoc(28, 29);
BitFieldLoc rive::PositionBottomUnitsBits = BitFieldLoc(30, 31);

// ---- Flags 2
BitFieldLoc rive::GapHorizontalUnitsBits = BitFieldLoc(0, 1);
BitFieldLoc rive::GapVerticalUnitsBits = BitFieldLoc(2, 3);
BitFieldLoc rive::MinWidthUnitsBits = BitFieldLoc(4, 5);
BitFieldLoc rive::MinHeightUnitsBits = BitFieldLoc(6, 7);
BitFieldLoc rive::MaxWidthUnitsBits = BitFieldLoc(8, 9);
BitFieldLoc rive::MaxHeightUnitsBits = BitFieldLoc(10, 11);

#ifdef WITH_RIVE_LAYOUT

KeyFrameInterpolator* LayoutComponentStyle::interpolator() { return m_interpolator; }

LayoutStyleInterpolation LayoutComponentStyle::interpolation()
{
    return LayoutStyleInterpolation(interpolationType());
}

LayoutAnimationStyle LayoutComponentStyle::animationStyle()
{
    return LayoutAnimationStyle(animationStyleType());
}

YGDisplay LayoutComponentStyle::display() { return YGDisplay(DisplayBits.read(layoutFlags0())); }

YGPositionType LayoutComponentStyle::positionType()
{
    return YGPositionType(PositionTypeBits.read(layoutFlags0()));
}

YGFlexDirection LayoutComponentStyle::flexDirection()
{
    return YGFlexDirection(FlexDirectionBits.read(layoutFlags0()));
}

YGDirection LayoutComponentStyle::direction()
{
    return YGDirection(DirectionBits.read(layoutFlags0()));
}

YGWrap LayoutComponentStyle::flexWrap() { return YGWrap(FlexWrapBits.read(layoutFlags0())); }

YGAlign LayoutComponentStyle::alignItems() { return YGAlign(AlignItemsBits.read(layoutFlags0())); }

YGAlign LayoutComponentStyle::alignSelf() { return YGAlign(AlignSelfBits.read(layoutFlags0())); }

YGAlign LayoutComponentStyle::alignContent()
{
    return YGAlign(AlignContentBits.read(layoutFlags0()));
}

YGJustify LayoutComponentStyle::justifyContent()
{
    return YGJustify(JustifyContentBits.read(layoutFlags0()));
}

YGOverflow LayoutComponentStyle::overflow()
{
    return YGOverflow(OverflowBits.read(layoutFlags0()));
}

bool LayoutComponentStyle::intrinsicallySized()
{
    return IntrinsicallySizedBits.read(layoutFlags0()) == 1;
}

YGUnit LayoutComponentStyle::widthUnits() { return YGUnit(WidthUnitsBits.read(layoutFlags0())); }

YGUnit LayoutComponentStyle::heightUnits() { return YGUnit(HeightUnitsBits.read(layoutFlags0())); }

YGUnit LayoutComponentStyle::borderLeftUnits()
{
    return YGUnit(BorderLeftUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::borderRightUnits()
{
    return YGUnit(BorderRightUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::borderTopUnits()
{
    return YGUnit(BorderTopUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::borderBottomUnits()
{
    return YGUnit(BorderBottomUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::marginLeftUnits()
{
    return YGUnit(MarginLeftUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::marginRightUnits()
{
    return YGUnit(MarginRightUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::marginTopUnits()
{
    return YGUnit(MarginTopUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::marginBottomUnits()
{
    return YGUnit(MarginBottomUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::paddingLeftUnits()
{
    return YGUnit(PaddingLeftUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::paddingRightUnits()
{
    return YGUnit(PaddingRightUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::paddingTopUnits()
{
    return YGUnit(PaddingTopUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::paddingBottomUnits()
{
    return YGUnit(PaddingBottomUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::positionLeftUnits()
{
    return YGUnit(PositionLeftUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::positionRightUnits()
{
    return YGUnit(PositionRightUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::positionTopUnits()
{
    return YGUnit(PositionTopUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::positionBottomUnits()
{
    return YGUnit(PositionBottomUnitsBits.read(layoutFlags1()));
}

YGUnit LayoutComponentStyle::gapHorizontalUnits()
{
    return YGUnit(GapHorizontalUnitsBits.read(layoutFlags2()));
}

YGUnit LayoutComponentStyle::gapVerticalUnits()
{
    return YGUnit(GapVerticalUnitsBits.read(layoutFlags2()));
}

YGUnit LayoutComponentStyle::maxWidthUnits()
{
    return YGUnit(MaxWidthUnitsBits.read(layoutFlags2()));
}

YGUnit LayoutComponentStyle::maxHeightUnits()
{
    return YGUnit(MaxHeightUnitsBits.read(layoutFlags2()));
}

YGUnit LayoutComponentStyle::minWidthUnits()
{
    return YGUnit(MinWidthUnitsBits.read(layoutFlags2()));
}
YGUnit LayoutComponentStyle::minHeightUnits()
{
    return YGUnit(MinHeightUnitsBits.read(layoutFlags2()));
}
void LayoutComponentStyle::markLayoutNodeDirty()
{
    if (parent()->is<LayoutComponent>())
    {
        parent()->as<LayoutComponent>()->markLayoutNodeDirty();
    }
}

void LayoutComponentStyle::markLayoutStyleDirty()
{
    if (parent()->is<LayoutComponent>())
    {
        parent()->as<LayoutComponent>()->markLayoutStyleDirty();
    }
}

StatusCode LayoutComponentStyle::onAddedDirty(CoreContext* context)
{
    auto code = Super::onAddedDirty(context);
    if (code != StatusCode::Ok)
    {
        return code;
    }

    auto coreObject = context->resolve(interpolatorId());
    if (coreObject != nullptr && coreObject->is<KeyFrameInterpolator>())
    {
        m_interpolator = static_cast<KeyFrameInterpolator*>(coreObject);
    }
    return StatusCode::Ok;
}
#else
void LayoutComponentStyle::markLayoutNodeDirty() {}
void LayoutComponentStyle::markLayoutStyleDirty() {}
#endif

void LayoutComponentStyle::layoutFlags0Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::layoutFlags1Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::layoutFlags2Changed() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexGrowChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexShrinkChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::flexBasisChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::aspectRatioChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::gapHorizontalChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::gapVerticalChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::maxWidthChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::maxHeightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::minWidthChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::minHeightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::borderBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::marginBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::paddingBottomChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionLeftChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionRightChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionTopChanged() { markLayoutNodeDirty(); }
void LayoutComponentStyle::positionBottomChanged() { markLayoutNodeDirty(); }