//
// © 2018-2020 Qualcomm Technologies, Inc. and/or its subsidiaries. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "IoTMultichannelState.h"

@class IoTMediaPlayerAttr;
@class IoTAudioAdjustmentState;
@class IoTAudioEffectsAttr;
@class IoTBassboostAttr;
@class IoTPresetReverbAttr;
@class IoTEqualizerAttr;
@class IoTDolbyAttr;
@class IoTVirtualXSoundXAttr;
@class IoTEffectsTrumpetAttr;
@class IoTVolumeControlAttr;
@class IoTInputSelectorAttr;
@class IoTOutputSelectorAttr;
@class IoTGroupAttr;
@class IoTPlaylistState;
@class IoTMeloDAttr;

@interface IoTAudioAdjustmentState: NSObject

- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithStateSyncQueue:(dispatch_queue_t)syncQueue;

@property (nonatomic, strong) IoTAudioEffectsAttr *audioEffectsAttr;
@property (nonatomic, strong) IoTBassboostAttr *bassboostAttr;
@property (nonatomic, strong) IoTPresetReverbAttr *reverbAttr;
@property (nonatomic, strong) IoTEqualizerAttr *equalizerAttr;
@property (nonatomic, strong) IoTDolbyAttr *dolbyAttr;
@property (nonatomic, strong) IoTVirtualXSoundXAttr *virtualXAttr;
@property (nonatomic, strong) IoTEffectsTrumpetAttr *trumpetAttr;
@property (nonatomic, strong) IoTMeloDAttr* meloDAttr;

@end

@interface IoTPlaylistState: NSObject

- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithStateSyncQueue:(dispatch_queue_t)syncQueue;

@property (nonatomic, assign) BOOL playlistSupported;
@property (nonatomic, copy) NSString *snapshotID;
@property (nonatomic, copy) NSString *userData;
@property (nonatomic, copy) NSString *ownerInfo;
@property (nonatomic, assign) uint size;

@end

@interface IoTPlayerState : NSObject

- (instancetype)init NS_UNAVAILABLE;
- (instancetype)initWithStateSyncQueue:(dispatch_queue_t)syncQueue NS_DESIGNATED_INITIALIZER;

@property (nonatomic, strong) IoTMediaPlayerAttr *mediaPlayerAttr;
@property (nonatomic, strong) IoTAudioAdjustmentState *audioAdjustmentState;
@property (nonatomic, strong) IoTVolumeControlAttr *volumeControlAttr;
@property (nonatomic, strong) IoTVolumeControlAttr *groupVolumeControlAttr;
@property (nonatomic, strong) IoTInputSelectorAttr *inputSelectorAttr;
@property (nonatomic, strong) IoTOutputSelectorAttr *outputSelectorAttr;
@property (nonatomic, strong) IoTGroupAttr *groupAttr;
@property (nonatomic, strong) IoTPlaylistState *playlistState;

@property (nonatomic, readonly) IoTMultichannelState *multiChannelState;

@end
