#include "item.h"
#include "resource.h"
#include "sprite.h"  // Para Sprite
#include "texture.h" // Para Texture

// Constructor
Item::Item(ItemData item)
    : sprite_(std::make_shared<Sprite>(Resource::get()->getTexture(item.tile_set_file), item.x, item.y, ITEM_SIZE_, ITEM_SIZE_)),
      change_color_speed(4)
{
    // Inicia variables
    sprite_->setClip((item.tile % 10) * ITEM_SIZE_, (item.tile / 10) * ITEM_SIZE_, ITEM_SIZE_, ITEM_SIZE_);
    collider_ = sprite_->getRect();
    counter_ = item.counter * change_color_speed;

    // Inicializa los colores
    color_.push_back(item.color1);
    color_.push_back(item.color1);

    color_.push_back(item.color2);
    color_.push_back(item.color2);
}

// Pinta el objeto en pantalla
void Item::render()
{
    const int INDEX = (counter_ / change_color_speed) % color_.size();
    sprite_->getTexture()->setColor(color_.at(INDEX).r, color_.at(INDEX).g, color_.at(INDEX).b);
    sprite_->render();
    sprite_->getTexture()->setColor(255, 255, 255);
}

// Obtiene su ubicación
SDL_Point Item::getPos()
{
    const SDL_Point p = {sprite_->getX(), sprite_->getY()};
    return p;
}

// Asigna los colores del objeto
void Item::setColors(Color col1, Color col2)
{
    // Reinicializa el vector de colores
    color_.clear();

    // Añade el primer color
    color_.push_back(col1);
    color_.push_back(col1);

    // Añade el segundo color
    color_.push_back(col2);
    color_.push_back(col2);
}