#include "rive/audio_event.hpp"
#include "rive/assets/audio_asset.hpp"
#include "rive/audio/audio_engine.hpp"
#include "rive/audio/audio_sound.hpp"
#include "rive/artboard.hpp"

using namespace rive;

void AudioEvent::trigger(const CallbackData& value)
{
    Super::trigger(value);

#ifdef WITH_RIVE_AUDIO
    auto audioAsset = (AudioAsset*)m_fileAsset;
    if (audioAsset == nullptr)
    {
        return;
    }
    auto audioSource = audioAsset->audioSource();
    if (audioSource == nullptr)
    {
        return;
    }

    auto engine =
#ifdef EXTERNAL_RIVE_AUDIO_ENGINE
        artboard()->audioEngine() != nullptr ? artboard()->audioEngine() :
#endif
                                             AudioEngine::RuntimeEngine();

    engine->play(audioSource, engine->timeInFrames(), 0, 0);
#endif
}

StatusCode AudioEvent::import(ImportStack& importStack)
{
    auto result = registerReferencer(importStack);
    if (result != StatusCode::Ok)
    {
        return result;
    }
    return Super::import(importStack);
}

void AudioEvent::setAsset(FileAsset* asset)
{
    if (asset->is<AudioAsset>())
    {
        FileAssetReferencer::setAsset(asset);
    }
}

Core* AudioEvent::clone() const
{
    AudioEvent* twin = AudioEventBase::clone()->as<AudioEvent>();
    if (m_fileAsset != nullptr)
    {
        twin->setAsset(m_fileAsset);
    }
    return twin;
}

uint32_t AudioEvent::assetId() { return AudioEventBase::assetId(); }