package com.berider.app.onboarding.data import com.berider.app.common.base.BaseRepository import com.berider.app.common.core.ResponseState import com.berider.app.common.utils.SingleLiveEvent import com.berider.app.common.utils.emit import com.berider.app.models.domain.onboarding.Onboarding import com.berider.app.models.domain.onboarding.OnboardingPage import com.berider.app.models.domain.onboarding.OnboardingPage.Companion.getPageType import com.berider.app.onboarding.R import com.berider.app.remoteconfig.RemoteConfigFunctions /** * Created by pavel.petkevich@skodaautodigilab.com on 06.April.2020 */ interface IOnboardingRepository { val uiState: SingleLiveEvent val data: SingleLiveEvent?> fun fetchOnBoarding(onboardingType: Onboarding.Type, isLocationPermissionGranted: Boolean) } class OnboardingRepository(private val remoteConfigFunctions: RemoteConfigFunctions) : IOnboardingRepository, BaseRepository() { override val uiState: SingleLiveEvent get() = responseState private val _data = SingleLiveEvent?>() override val data: SingleLiveEvent?> get() = _data override fun fetchOnBoarding(onboardingType: Onboarding.Type, isLocationPermissionGranted: Boolean) { responseState.emit(ResponseState.BlockingLoadingState.Start(bgColorRes = R.color.transparent)) remoteConfigFunctions.apply { Array::class.fetchRemoteConfig( onboardingType.defRcFile, onboardingType.rcKeyName ) { list -> _data.emit(list?.removeLocationPermPage(onboardingType, isLocationPermissionGranted)?.filter { !it.isIosOnly }) responseState.emit(ResponseState.BlockingLoadingState.Stop()) } } } private fun Array.removeLocationPermPage( onboardingType: Onboarding.Type, isLocationPermissionGranted: Boolean ) = toMutableList().apply { this.takeIf { onboardingType == Onboarding.Type.MAIN && isLocationPermissionGranted } ?.find { getPageType(it.type) == OnboardingPage.Type.LOCATION }?.let { remove(it) } } }