#include "SkinData.h"
#include "DisplayData.h"

DRAGONBONES_NAMESPACE_BEGIN

void SkinData::_onClear()
{
    for (const auto& pair : displays)
    {
        for (const auto display : pair.second)
        {
            if (display != nullptr)
            {
                display->returnToPool();
            }
        }
    }

    name = "";
    displays.clear();
    parent = nullptr;
}

void SkinData::addDisplay(std::string_view slotName, DisplayData* value)
{
    if (value != nullptr)
    {
        value->parent = this;
    }

    displays[slotName].push_back(value);  // TODO clear prev
}

DisplayData* SkinData::getDisplay(std::string_view slotName, std::string_view displayName)
{
    const auto slotDisplays = getDisplays(slotName);
    if (slotDisplays != nullptr)
    {
        for (const auto display : *slotDisplays)
        {
            if (display != nullptr && display->name == displayName)
            {
                return display;
            }
        }
    }

    return nullptr;
}

DRAGONBONES_NAMESPACE_END