// Copyright (c), Firelight Technologies Pty, Ltd. 2024-2024.

#pragma once
#include "FMODAudioLinkInputClient.h"

#include "IAudioLink.h"
#include "IBufferedAudioOutput.h"

struct FFMODAudioLinkSourcePushed : IAudioLinkSourcePushed
{
    int32 SourceId = INDEX_NONE;
    int32 NumFramesReceivedSoFar = INDEX_NONE;
    FSharedBufferedOutputPtr ProducerSP;
    FSharedFMODAudioLinkInputClientPtr ConsumerSP;
    IAudioLinkFactory::FAudioLinkSourcePushedCreateArgs CreateArgs;

    FFMODAudioLinkSourcePushed(const IAudioLinkFactory::FAudioLinkSourcePushedCreateArgs& InArgs, IAudioLinkFactory* InFactory);
    virtual ~FFMODAudioLinkSourcePushed() override;
    void OnNewBuffer(const FOnNewBufferParams& InArgs) override;
    void OnSourceDone(const int32 InSourceId) override;
    void OnSourceReleased(const int32 InSourceId) override;
    void OnUpdateWorldState(const FOnUpdateWorldStateParams& InParams) override;
};