#ifndef XREVERBSETTINGS_H
#define XREVERBSETTINGS_H

#include "xasset.h"

class XReverbSettings : public XAsset
{
public:
    explicit XReverbSettings();

    quint32 GetReflectionsDelay() const;
    quint8 GetReverbDelay() const;
    quint8 GetRearDelay() const;
    quint8 GetPositionLeft() const;
    quint8 GetPositionRight() const;
    quint8 GetPositionMatrixLeft() const;
    quint8 GetPositionMatrixRight() const;
    quint8 GetEarlyDiffusion() const;
    quint8 GetLateDiffusion() const;
    quint8 GetLowEQGain() const;
    quint8 GetLowEQCutoff() const;
    quint8 GetHighEQGain() const;
    quint8 GetHighEQCutoff() const;
    float GetRoomFilterFreq() const;
    float GetRoomFilterMain() const;
    float GetRoomFilterHF() const;
    float GetReflectionsGain() const;
    float GetReverbGain() const;
    float GetDecayTime() const;
    float GetDensity() const;
    float GetRoomSize() const;

    virtual void Clear() override;
    virtual void ParseData(QDataStream* aStream) override;

public slots:
    void SetReflectionsDelay(quint32 aReflectionsDelay);
    void SetReverbDelay(quint8 aReverbDelay);
    void SetRearDelay(quint8 aRearDelay);
    void SetPositionLeft(quint8 aPositionLeft);
    void SetPositionRight(quint8 aPositionRight);
    void SetPositionMatrixLeft(quint8 aPositionMatrixLeft);
    void SetPositionMatrixRight(quint8 aPositionMatrixRight);
    void SetEarlyDiffusion(quint8 aEarlyDiffusion);
    void SetLateDiffusion(quint8 aLateDiffusion);
    void SetLowEQGain(quint8 aLowEQGain);
    void SetLowEQCutoff(quint8 aLowEQCutoff);
    void SetHighEQGain(quint8 aHighEQGain);
    void SetHighEQCutoff(quint8 aHighEQCutoff);
    void SetRoomFilterFreq(float aRoomFilterFreq);
    void SetRoomFilterMain(float aRoomFilterMain);
    void SetRoomFilterHF(float aRoomFilterHF);
    void SetReflectionsGain(float aReflectionsGain);
    void SetReverbGain(float aReverbGain);
    void SetDecayTime(float aDecayTime);
    void SetDensity(float aDensity);
    void SetRoomSize(float aRoomSize);

private:
    quint32 mReflectionsDelay;
    quint8 mReverbDelay;
    quint8 mRearDelay;
    quint8 mPositionLeft;
    quint8 mPositionRight;
    quint8 mPositionMatrixLeft;
    quint8 mPositionMatrixRight;
    quint8 mEarlyDiffusion;
    quint8 mLateDiffusion;
    quint8 mLowEQGain;
    quint8 mLowEQCutoff;
    quint8 mHighEQGain;
    quint8 mHighEQCutoff;
    float mRoomFilterFreq;
    float mRoomFilterMain;
    float mRoomFilterHF;
    float mReflectionsGain;
    float mReverbGain;
    float mDecayTime;
    float mDensity;
    float mRoomSize;
};

#endif // XREVERBSETTINGS_H
