package com.fireworksdk.bridge.models import com.fireworksdk.bridge.models.enums.FWVideoFeedTitlePosition import org.json.JSONObject object FWVideoFeedConfigModelDeserializer { private const val BACKGROUND_COLOR_KEY = "backgroundColor" private const val CORNER_RADIUS_KEY = "cornerRadius" private const val ASPECT_RATIO_KEY = "aspectRatio" private const val TITLE_KEY = "title" private const val TITLE_POSITION_KEY = "titlePosition" private const val PLAY_ICON_KEY = "playIcon" private const val SHOW_AD_BADGE_KEY = "showAdBadge" private const val ENABLE_AUTOPLAY_KEY = "enableAutoplay" private const val GRID_COLUMNS_KEY = "gridColumns" private const val ITEM_SPACING_KEY = "itemSpacing" private const val CONTENT_PADDING_KEY = "contentPadding" private const val HIDDEN_KEY = "hidden" private const val TEXT_COLOR_KEY = "textColor" private const val FONT_SIZE_KEY = "fontSize" private const val NUMBER_OF_LINES = "numberOfLines" private const val FONT_INFO_KEY = "androidFontInfo" private const val GRADIENT_DRAWABLE_KEY = "gradientDrawable" private const val ICON_WIDTH_KEY = "iconWidth" private const val IMAGE_NAME_KEY = "imageName" fun deserialize(responseJson: JSONObject?): FWVideoFeedConfigModel? { responseJson?: return null val backgroundColor = if (responseJson.has(BACKGROUND_COLOR_KEY)) responseJson.optString(BACKGROUND_COLOR_KEY) else null val cornerRadius = if (!responseJson.isNull(CORNER_RADIUS_KEY)) responseJson.optInt(CORNER_RADIUS_KEY) else null val aspectRatio = if (!responseJson.isNull(ASPECT_RATIO_KEY)) responseJson.optDouble(ASPECT_RATIO_KEY) else null val title = if (responseJson.has(TITLE_KEY)) deserializeTitle(responseJson.optJSONObject(TITLE_KEY)) else null val titlePosition = if (responseJson.has(TITLE_POSITION_KEY)) responseJson.optString(TITLE_POSITION_KEY) else null val playIcon = if (responseJson.has(PLAY_ICON_KEY)) deserializePlayIcon(responseJson.optJSONObject(PLAY_ICON_KEY)) else null val showAdBadge = if (responseJson.has(SHOW_AD_BADGE_KEY)) responseJson.optBoolean(SHOW_AD_BADGE_KEY) else null val enableAutoplay = if (responseJson.has(ENABLE_AUTOPLAY_KEY)) responseJson.optBoolean(ENABLE_AUTOPLAY_KEY) else null val gridColumns = if (!responseJson.isNull(GRID_COLUMNS_KEY)) responseJson.optInt(GRID_COLUMNS_KEY) else null val itemSpacing = if (!responseJson.isNull(ITEM_SPACING_KEY)) responseJson.optInt(ITEM_SPACING_KEY) else null val contentPadding = if (responseJson.has(CONTENT_PADDING_KEY)) deserializeContentPadding(responseJson.optJSONObject(CONTENT_PADDING_KEY)) else null return FWVideoFeedConfigModel( backgroundColor = backgroundColor, cornerRadius = cornerRadius, title = title, titlePosition = if (!titlePosition.isNullOrBlank()) FWVideoFeedTitlePosition.deserialize(titlePosition) else null, playIcon = playIcon, showAdBadge = showAdBadge, enableAutoplay = enableAutoplay, gridColumns = gridColumns, itemSpacing = itemSpacing, aspectRatio = aspectRatio, contentPadding = contentPadding, ) } private fun deserializeTitle(titleJson: JSONObject?): FWVideoFeedConfigModel.FWTitleModel { titleJson ?: return FWVideoFeedConfigModel.FWTitleModel() val hidden = if (titleJson.has(HIDDEN_KEY)) titleJson.optBoolean(HIDDEN_KEY) else null val textColor = if (titleJson.has(TEXT_COLOR_KEY)) titleJson.optString(TEXT_COLOR_KEY) else null val fontSize = if (titleJson.has(FONT_SIZE_KEY)) titleJson.optInt(FONT_SIZE_KEY) else null val numberOfLines = if (titleJson.has(NUMBER_OF_LINES)) titleJson.optInt(NUMBER_OF_LINES) else null val fontInfo = FWFontInfoModelDeserializer.deserialize(titleJson.optJSONObject(FONT_INFO_KEY)) val backgroundColor = if (titleJson.has(BACKGROUND_COLOR_KEY)) titleJson.optString(BACKGROUND_COLOR_KEY) else null val gradientDrawable = FWGradientDrawableModelDeserializer.deserialize(titleJson.optJSONObject(GRADIENT_DRAWABLE_KEY)) return FWVideoFeedConfigModel.FWTitleModel( hidden = hidden, textColor = textColor, fontSize = fontSize, numberOfLines = numberOfLines, fontInfo = fontInfo, backgroundColor = backgroundColor, gradientDrawable = gradientDrawable, ) } private fun deserializePlayIcon(titleJson: JSONObject?): FWVideoFeedConfigModel.FWPlayIconModel { titleJson ?: return FWVideoFeedConfigModel.FWPlayIconModel() val hidden = titleJson.optBoolean(HIDDEN_KEY) val iconWidth = if (!titleJson.isNull(ICON_WIDTH_KEY)) titleJson.optInt(ICON_WIDTH_KEY) else null val imageName = if (!titleJson.isNull(IMAGE_NAME_KEY)) titleJson.optString(IMAGE_NAME_KEY) else null return FWVideoFeedConfigModel.FWPlayIconModel( hidden = hidden, iconWidth = iconWidth, imageName = imageName, ) } private fun deserializeContentPadding(paddingJson: JSONObject?): FWVideoFeedConfigModel.FWPaddingModel? { paddingJson ?: return null val top = if (!paddingJson.isNull("top")) paddingJson.optInt("top") else null val right = if (!paddingJson.isNull("right")) paddingJson.optInt("right") else null val bottom = if (!paddingJson.isNull("bottom")) paddingJson.optInt("bottom") else null val left = if (!paddingJson.isNull("left")) paddingJson.optInt("left") else null return FWVideoFeedConfigModel.FWPaddingModel( top = top, right = right, bottom = bottom, left = left, ) } }