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

#pragma once

#include "FMODAudioLink.h"
#include "IAudioLinkFactory.h"

class FFMODAudioLinkFactory : public IAudioLinkFactory
{
public:
    FFMODAudioLinkFactory() = default;
    virtual ~FFMODAudioLinkFactory() override = default;

    static FName GetFactoryNameStatic();
    static bool bHasSubmix;

protected:
    /** Begin IAudioLinkFactory */
    FName GetFactoryName() const override;
    TSubclassOf<UAudioLinkSettingsAbstract> GetSettingsClass() const override;
    TUniquePtr<IAudioLink> CreateSubmixAudioLink(const FAudioLinkSubmixCreateArgs&) override;
    TUniquePtr<IAudioLink> CreateSourceAudioLink(const FAudioLinkSourceCreateArgs&) override;
    FAudioLinkSourcePushedSharedPtr CreateSourcePushedAudioLink(const FAudioLinkSourcePushedCreateArgs&) override;
    FAudioLinkSynchronizerSharedPtr CreateSynchronizerAudioLink() override;
    /** End IAudioLinkFactory */
};