package com.applicaster.oasisplayer.som import com.applicaster.oasisplayer.config.plugin.PluginConfig import com.applicaster.oasisplayer.som.adrules.AdExcludeRule class SomConfigParser(private val pluginConfig: PluginConfig?) { fun getSomConfig(extensions: Map): SomConfig { return parseExtensions(extensions) } private fun parseExtensions(extensions: Map): SomConfig { return SomConfig( domain = extensions.getOrDefaultString( KEY_DOMAIN, pluginConfig?.defaultSomDomain.orEmpty() ), subdomain = extensions.getOrDefaultString( KEY_SUBDOMAIN, pluginConfig?.defaultSomDomain.orEmpty() ), countryMetadata = pluginConfig?.somCountryMetadata ?: CountryMetadata.DE, adExcludeRule = parseAdRules(extensions), midrollOffsetsSec = parseMidrollOffsets(extensions), isLongVideo = if (extensions.containsKey(KEY_IS_LONG)) extensions[KEY_IS_LONG] as Boolean else false ) } private fun parseAdRules(extensions: Map): AdExcludeRule { val adRuleStr = if (extensions.containsKey(KEY_AD_EXCLUDE)) { extensions[KEY_AD_EXCLUDE] as? String } else null return AdExcludeRule.parseFromKey(adRuleStr) } private fun parseMidrollOffsets(extensions: Map): List { var midrollOffsets: List? = null if (extensions.containsKey(KEY_AD_MARKER)) { val adMarkers = extensions[KEY_AD_MARKER] as? Map if (adMarkers?.containsKey(KEY_MIDROLL_OFFSETS) == true) { midrollOffsets = adMarkers[KEY_MIDROLL_OFFSETS] as? List } } return midrollOffsets?.map { "${it.toLong()}s" }.orEmpty() } private fun Map<*, *>.getOrDefaultString(key: String, default: String): String { return if (containsKey(key)) get(key) as? String ?: default else default } companion object { private const val KEY_DOMAIN = "domain" private const val KEY_SUBDOMAIN = "subdomain" private const val KEY_IS_LONG = "isLongPlay" private const val KEY_AD_EXCLUDE = "adExclude" private const val KEY_AD_MARKER = "adMarker" private const val KEY_MIDROLL_OFFSETS = "midrollOffsets" } }