#include "rive/text/text_input_drawable.hpp"
#include "rive/text/text_input.hpp"
#include "rive/shapes/paint/shape_paint.hpp"

using namespace rive;

TextInput* TextInputDrawable::textInput() const
{
  return parent()->as<TextInput>();
}

ShapePaintPath* TextInputDrawable::worldPath()
{
  RIVE_UNREACHABLE();
  return nullptr;
}

StatusCode TextInputDrawable::onAddedClean(CoreContext* context)
{
  if (!parent()->is<TextInput>())
  {
    return StatusCode::InvalidObject;
  }

  return StatusCode::Ok;
}

const Mat2D& TextInputDrawable::shapeWorldTransform() const
{
  return worldTransform();
}

void TextInputDrawable::draw(Renderer* renderer)
{
  for (auto shapePaint : m_ShapePaints)
  {
    if (!shapePaint->isVisible())
    {
      continue;
    }
    auto shapePaintPath = shapePaint->pickPath(this);
    if (shapePaintPath == nullptr)
    {
      continue;
    }
    shapePaint->draw(renderer, shapePaintPath, textInput()->worldTransform());
  }
}

bool TextInputDrawable::willDraw()
{
  return Super::willDraw() && renderOpacity() != 0.0f;
}