/*
 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
 * SPDX-License-Identifier: Apache-2.0
 */

package com.amazonaws.services.chime.sdkdemo.device

import com.amazonaws.services.chime.sdk.meetings.audiovideo.AudioVideoFacade
import com.amazonaws.services.chime.sdk.meetings.device.MediaDevice

/**
 * In order to support 23 or below we'll need to manually handle active audio device locally.
 */
class AudioDeviceManager(private val audioVideo: AudioVideoFacade) {
    // Handle active audio device for 21-23 since getActiveAudioDevice is only supported 24+
    private var currentActiveAudioDevice: MediaDevice? = null

    val activeAudioDevice: MediaDevice? get() = currentActiveAudioDevice

    /**
     * Set active device whenever chooseAudioDevice is called.
     */
    fun setActiveAudioDevice(mediaDevice: MediaDevice) {
        currentActiveAudioDevice = mediaDevice
    }

    /**
     * Reconfigure active device based on priority.
     * Current priority is bluetooth -> wired headset -> speakerphone -> earpiece
     */
    fun reconfigureActiveAudioDevice() {
        val devices = audioVideo.listAudioDevices().sortedBy { it.order }
        if (devices.isNotEmpty()) {
            if (devices[0] == currentActiveAudioDevice) return
            audioVideo.chooseAudioDevice(devices[0])
            setActiveAudioDevice(devices[0])
        }
    }
}