package com.storytellersdkgam import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap import com.storyteller.domain.ads.entities.StorytellerAdRequestInfo import com.storyteller.domain.ads.entities.StorytellerAdRequestInfo.ClipsAdRequestInfo import com.storyteller.domain.ads.entities.StorytellerAdRequestInfo.ItemInfo import com.storyteller.domain.ads.entities.StorytellerAdRequestInfo.StoriesAdRequestInfo fun StorytellerAdRequestInfo.toAdRequestInfo(): WritableMap = Arguments.createMap().apply { when (this@toAdRequestInfo) { is StoriesAdRequestInfo -> putMap( "stories", Arguments.createMap().apply { putString("placement", placement) putArray("categories", Arguments.createArray().apply { categories.forEach(::pushString) }) putMap("story", itemInfo.toMap()) putInt("adIndex", adIndex) }) is ClipsAdRequestInfo -> putMap( "clips", Arguments.createMap().apply { putString("collection", collection) putMap("clip", itemInfo.toMap()) if (nextClipCategories.isNotEmpty()) { putMap("nextClip", Arguments.createMap().apply { putArray("categories", nextClipCategories.toCategoriesArray { it.name to (it.externalId ?: "") }) }) } putInt("adIndex", adIndex) }) } } private fun ItemInfo.toMap(): WritableMap = Arguments.createMap().apply { putString("contentId", contentId) putArray("categories", categories.toCategoriesArray { it.name to (it.externalId ?: "") }) } private inline fun List.toCategoriesArray(mapper: (T) -> Pair) = Arguments.createArray().apply { forEach { item -> val (name, externalId) = mapper(item) pushMap(Arguments.createMap().apply { putString("name", name) putString("externalId", externalId) }) } }