#include "game/entities/item.hpp"

#include "core/rendering/surface_sprite.hpp"  // Para SSprite
#include "core/resources/resource.hpp"        // Para Resource

// Constructor
Item::Item(const ItemData &item)
    : sprite_(std::make_shared<SurfaceSprite>(Resource::get()->getSurface(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 {
    const int INDEX = (counter_ / change_color_speed_) % color_.size();
    sprite_->render(1, color_.at(INDEX));
}

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

// Asigna los colores del objeto
void Item::setColors(Uint8 col1, Uint8 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);
}