package com.fireworksdk.bridge.models import com.fireworksdk.bridge.models.enums.FWVideoFeedMode import com.fireworksdk.bridge.models.enums.FWVideoFeedSource import org.json.JSONObject object FWVideoFeedPropsModelDeserializer { private const val SOURCE_KEY = "source" private const val CHANNEL_KEY = "channel" private const val PLAYLIST_KEY = "playlist" private const val PLAYLIST_GROUP_KEY = "playlistGroup" private const val HASHTAG_FILTER_EXPRESSION_KEY = "hashtagFilterExpression" private const val PRODUCT_IDS_KEY = "productIds" private const val CONTENT_ID_KEY = "contentId" private const val SHARE_URL_KEY = "shareUrl" private const val MODE_KEY = "mode" private const val MARGIN_RIGHT_KEY = "marginRight" private const val CORNER_RADIUS_KEY = "cornerRadius" private const val AD_CONFIGURATION_KEY = "adConfiguration" private const val VIDEO_FEED_CONFIGURATION_KEY = "videoFeedConfiguration" private const val CIRCLE_STORY_CONFIGURATION_KEY = "circleStoryConfiguration" private const val VIDEO_PLAYER_CONFIGURATION_KEY = "videoPlayerConfiguration" private const val STORY_BLOCK_CONFIGURATION_KEY = "storyBlockConfiguration" private const val DYNAMIC_CONTENT_PARAMETERS_KEY = "dynamicContentParameters" fun deserialize(responseJson: JSONObject?): FWVideoFeedPropsModel? { responseJson ?: return null val source = if (responseJson.has(SOURCE_KEY)) responseJson.optString(SOURCE_KEY) else null val channel = if (responseJson.has(CHANNEL_KEY)) responseJson.optString(CHANNEL_KEY) else null val playlist = if (responseJson.has(PLAYLIST_KEY)) responseJson.optString(PLAYLIST_KEY) else null val playlistGroup = if (responseJson.has(PLAYLIST_GROUP_KEY)) responseJson.optString(PLAYLIST_GROUP_KEY) else null val hashtagFilterExpression = if (responseJson.has(HASHTAG_FILTER_EXPRESSION_KEY)) responseJson.optString( HASHTAG_FILTER_EXPRESSION_KEY) else null var productIds: List? = null val productIdJsonArray = if (responseJson.has(PRODUCT_IDS_KEY)) responseJson.optJSONArray(PRODUCT_IDS_KEY) else null if (productIdJsonArray != null) { val list: MutableList = mutableListOf() (0 until productIdJsonArray.length()).forEach { val value = productIdJsonArray.getString(it) list.add(value) } productIds = list } val contentId = if (responseJson.has(CONTENT_ID_KEY)) responseJson.optString(CONTENT_ID_KEY) else null val shareUrl = if (responseJson.has(SHARE_URL_KEY)) responseJson.optString(SHARE_URL_KEY) else null val mode = if (responseJson.has(MODE_KEY)) responseJson.optString(MODE_KEY) else null val videoFeedConfiguration = FWVideoFeedConfigModelDeserializer.deserialize( responseJson.optJSONObject(VIDEO_FEED_CONFIGURATION_KEY) ) ?: FWVideoFeedConfigModelDeserializer.deserialize( responseJson.optJSONObject(CIRCLE_STORY_CONFIGURATION_KEY) ) val videoPlayerConfiguration = FWVideoPlayerConfigModelDeserializer.deserialize( responseJson.optJSONObject(VIDEO_PLAYER_CONFIGURATION_KEY) ) val storyBlockConfiguration = FWVideoPlayerConfigModelDeserializer.deserialize( responseJson.optJSONObject(STORY_BLOCK_CONFIGURATION_KEY) ) val dynamicContentParametersObject = if (responseJson.has(DYNAMIC_CONTENT_PARAMETERS_KEY)) responseJson.optJSONObject(DYNAMIC_CONTENT_PARAMETERS_KEY) else null var dynamicContentParameters: Map>? = null val keys = dynamicContentParametersObject?.keys() if (keys != null) { val dynamicContentParametersMutableMap: MutableMap> = mutableMapOf() for (key in keys) { val jsonArray = dynamicContentParametersObject.optJSONArray(key) if (jsonArray != null) { val list: MutableList = mutableListOf() (0 until jsonArray.length()).forEach { val value = jsonArray.getString(it) list.add(value) } dynamicContentParametersMutableMap[key] = list.toList() } } dynamicContentParameters = dynamicContentParametersMutableMap.toMap() } val marginRight = if (responseJson.has(MARGIN_RIGHT_KEY)) responseJson.optDouble(MARGIN_RIGHT_KEY) else null val cornerRadius = if (!responseJson.isNull(CORNER_RADIUS_KEY)) responseJson.optInt(CORNER_RADIUS_KEY) else null val adConfiguration = FWAdConfigurationDeserializer.deserialize(responseJson.optJSONObject(AD_CONFIGURATION_KEY)) return FWVideoFeedPropsModel( source = if (!source.isNullOrBlank()) FWVideoFeedSource.deserialize(source) else null, channel = channel, playlist = playlist, playlistGroup = playlistGroup, hashtagFilterExpression = hashtagFilterExpression, productIds = productIds, contentId = contentId, shareUrl = shareUrl, mode = if (!mode.isNullOrBlank()) FWVideoFeedMode.deserialize(mode) else null, videoFeedConfiguration = videoFeedConfiguration, videoPlayerConfiguration = storyBlockConfiguration ?: videoPlayerConfiguration, dynamicContentParameters = dynamicContentParameters, marginRight = marginRight, cornerRadius = cornerRadius, adConfiguration = adConfiguration, ) } }