// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
// SPDX-License-Identifier: MPL-2.0

#pragma once

#include <audio_core/renderer/sink/sink_info_base.h>
#include <audio_core/common/common_types.h>

namespace AudioCore::AudioRenderer {
/**
 * Info for a device sink.
 */
class DeviceSinkInfo : public SinkInfoBase {
public:
    DeviceSinkInfo();

    /**
     * Clean up for info, resetting it to a default state.
     */
    void CleanUp() override;

    /**
     * Update the info according to parameters, and write the current state to out_status.
     *
     * @param error_info  - Output error code.
     * @param out_status  - Output status.
     * @param in_params   - Input parameters.
     * @param pool_mapper - Unused.
     */
    void Update(BehaviorInfo::ErrorInfo& error_info, OutStatus& out_status,
                const InParameter& in_params, const PoolMapper& pool_mapper) override;

    /**
     * Update the device sink on command generation, unused.
     */
    void UpdateForCommandGeneration() override;
};
static_assert(sizeof(DeviceSinkInfo) <= sizeof(SinkInfoBase), "DeviceSinkInfo is too large!");

} // namespace AudioCore::AudioRenderer
