//=============================================================================
// KFGFxPopup_OptionMic
//=============================================================================
// Class Description
//=============================================================================
// Killing Floor 2
// Copyright (C) 2019 SABER Interactive
//  - Author Pavel Rodionov 14/11/2019
//=============================================================================

//@SABER_EGS_BEGIN
class KFGFxPopup_OptionMic extends KFGFxObject_Popup
config(Microphone);
`include(KFProfileSettings.uci)

var float micVolume;
var config int deviceIndex;

var OnlineSubsystemSteamworks SubSystem;

function InitializePopup( KFGFxMoviePlayer_Manager InManager )
{
    Super.InitializePopup(InManager);

    SubSystem = OnlineSubsystemSteamworks(class'GameEngine'.static.GetOnlineSubsystem());

    setLocalizedText();

    getDevicesListFromVivox();
    selectDevice();
    setMicVolume();
}

function setLocalizedText()
{
    local GFxObject LocalizedStringsObject;

    LocalizedStringsObject = CreateObject("Object");

    LocalizedStringsObject.SetString("devicesTextField", Class'KFCommon_LocalizedStrings'.default.MicrophonePopupSelectDeviceString);
    LocalizedStringsObject.SetString("sliderTextField", Class'KFCommon_LocalizedStrings'.default.MicrophonePopupVolumeString);
    LocalizedStringsObject.SetString("checkMicButton", Class'KFCommon_LocalizedStrings'.default.MicrophonePopupCheckString);
    LocalizedStringsObject.SetString("stopMicButton", Class'KFCommon_LocalizedStrings'.default.MicrophonePopupStopString);
    LocalizedStringsObject.SetString("refreshButton", Class'KFCommon_LocalizedStrings'.default.MicrophonePopupRefreshString);

    SetObject("setTextLocalized", LocalizedStringsObject);
}

function getDevicesListFromVivox()
{
    local array<string> audioDevices;
    local int i;
    local GFxObject DataProvider;
    DataProvider = CreateArray();

    if( SubSystem != none )
	{
		audioDevices = Subsystem.GetVivoxAudioDevices();

        for (i = 0; i < audioDevices.length; i++)
        {
            DataProvider.SetElementString(i, audioDevices[i]);
        }

        SetObject("fillDevicesList", DataProvider);
	}
}

function selectDevice()
{
    `log(getFuncName()@"deviceIndex:"@deviceIndex);
    SetInt("selectDevices", deviceIndex);
}

function setMicVolume()
{
    micVolume = Manager.CachedProfile.GetProfileFloat(KFID_VOIPMicVolumeMultiplier);
    `log(getFuncName()@"micVolume:"@micVolume);		
    SetFloat("setMicVolume", micVolume);
}


//Action scripts callbacks
function Callback_onBtnAcceptClick()
{
    if( SubSystem != none )
    {
        Subsystem.VivoxEchoTestStop();
    }
    Manager.CachedProfile.SetProfileSettingValueFloat(KFID_VOIPMicVolumeMultiplier, micVolume);
    SaveConfig();
    ClosePopUp();
}

function Callback_onBtnDeclineClick()
{
    if( SubSystem != none )
    {
        Subsystem.VivoxEchoTestStop();
    }
    ClosePopUp();
}

function Callback_DeviceSelect(int newDeviceIndex)
{
    `log(getFuncName()@"deviceIndex:"@newDeviceIndex);
     deviceIndex = newdeviceIndex;
    if( SubSystem != none )
	{
		Subsystem.SetVivoxMicDevice(deviceIndex);
	}
}

function Callback_onRefreshButtonClick()
{
    `log(getFuncName());
    getDevicesListFromVivox();
}

function Callback_MicVolumeChanged(float NewVolume)
{
    `log(getFuncName()@"volume:"@NewVolume);
    micVolume = NewVolume;
    OSS_SetVoIPMicVolume(newVolume);
}

function OSS_SetVoIPMicVolume(float NewVolume)
{
	if( SubSystem != none )
	{
		Subsystem.SetVoIPMicVolume(NewVolume);
	}
}

function Callback_onCheckMicClick()
{
    `log(getFuncName());
    if( SubSystem != none )
	{
		Subsystem.VivoxEchoTestStart();
	}
}

function Callback_onStopMicClick()
{
    `log(getFuncName());
    if( SubSystem != none )
	{
		Subsystem.VivoxEchoTestStop();
	}
}

defaultproperties
{
}
//@SABER_EGS_END