package com.fireworksdk.bridge.models import com.fireworksdk.bridge.models.enums.FWCtaDelayType import com.fireworksdk.bridge.models.enums.FWFeedCompleteAction import com.fireworksdk.bridge.models.enums.FWPlayerStyle import com.fireworksdk.bridge.models.enums.FWShareButtonPosition import com.fireworksdk.bridge.models.enums.FWVideoCompleteAction import com.fireworksdk.bridge.models.enums.FWVideoPlayerCTAWidth import com.fireworksdk.bridge.models.enums.FWVideoPlayerScrollDirection import org.json.JSONObject object FWVideoPlayerConfigModelSerializer { private const val PLAYER_STYLE_KEY = "playerStyle" private const val SCROLL_DIRECTION_KEY = "scrollDirection" private const val ENABLE_SCROLL_FOR_VERTICAL_KEY = "enableScrollForVertical" private const val VIDEO_COMPLETE_ACTION_KEY = "videoCompleteAction" private const val FEED_COMPLETE_ACTION_KEY = "feedCompleteAction" private const val SHOW_SHARE_BUTTON_KEY = "showShareButton" private const val CTA_BUTTON_STYLE_KEY = "ctaButtonStyle" private const val SHOW_MUTE_BUTTON_KEY = "showMuteButton" private const val SHOW_PLAYBACK_BUTTON_KEY = "showPlaybackButton" private const val SHOW_BRANDING_KEY = "showBranding" private const val CTA_DELAY_KEY = "ctaDelay" private const val CTA_HIGHLIGHT_DELAY_KEY = "ctaHighlightDelay" private const val SHARE_BASE_URL_KEY = "shareBaseURL" private const val CTA_WIDTH_KEY = "ctaWidth" private const val ENABLE_PIP_KEY = "enablePictureInPicture" private const val SHOW_VIDEO_DETAIL_TITLE_KEY = "showVideoDetailTitle" private const val BUTTON_CONFIGURATION_KEY = "buttonConfiguration" private const val VIDEO_PLAYER_LOGO_CONFIGURATION_KEY = "videoPlayerLogoConfiguration" private const val COUNT_DOWN_TIMER_CONFIGURATION_KEY = "countdownTimerConfiguration" private const val ACTION_BUTTON_STYLE_KEY = "actionButtonStyle" private const val CANCEL_BUTTON_STYLE_KEY = "cancelButtonStyle" private const val CHAT_STYLE_KEY = "chatStyle" private const val BACKGROUND_COLOR_KEY = "backgroundColor" private const val FONT_SIZE_KEY = "fontSize" private const val TEXT_COLOR_KEY = "textColor" private const val SHAPE_KEY = "shape" private const val TEXT_SHADOW_KEY = "textShadow" private const val OPACITY_KEY = "opacity" private const val COLOR_KEY = "color" private const val OFFSET_X_KEY = "offsetX" private const val OFFSET_Y_KEY = "offsetY" private const val RADIUS_KEY = "radius" private const val TYPE_KEY = "type" private const val VALUE_KEY = "value" private const val SHOW_FULL_SCREEN_ICON = "enableFullScreen" private const val ENABLE_AUTOPLAY = "enableAutoplay" private const val ENABLE_AUTOPAUSE = "enableAutopause" private const val ENABLE_SMALL_SIZE_IN_COMPACT = "enableSmallSizeInCompact" private const val SHOULD_EXTEND_MEDIA_OUTSIDE_SAFE_AREA_KEY = "shouldExtendMediaOutsideSafeArea" private const val ADDITIONAL_CONTROLS_INSET_KEY = "additionalControlsInset" private const val IS_ARROW_BUTTON_VISIBLE_KEY = "isArrowButtonVisible" private const val IS_FULLSCREEN_ARROW_BUTTON_VISIBLE_KEY = "isFullscreenArrowButtonVisible" private const val SHOW_MORE_BUTTON_KEY = "showMoreButton" private const val SHARE_BUTTON_POSITION_KEY = "shareButtonPosition" private const val HANDLE_APPEARANCE_MANUALLY_KEY = "handleAppearanceManually" fun serialize(model: FWVideoPlayerConfigModel?): JSONObject? { model ?: return null val jsonObject = JSONObject() jsonObject.put(PLAYER_STYLE_KEY, FWPlayerStyle.serialize(model.playerStyle)) jsonObject.put(SCROLL_DIRECTION_KEY, FWVideoPlayerScrollDirection.serialize(model.scrollDirection)) jsonObject.put(ENABLE_SCROLL_FOR_VERTICAL_KEY, model.enableScrollForVertical) jsonObject.put(VIDEO_COMPLETE_ACTION_KEY, FWVideoCompleteAction.serialize(model.videoCompleteAction)) jsonObject.put(FEED_COMPLETE_ACTION_KEY, FWFeedCompleteAction.serialize(model.feedCompleteAction)) jsonObject.put(SHOW_SHARE_BUTTON_KEY, model.showShareButton) jsonObject.put(CTA_BUTTON_STYLE_KEY, serializeCtaButtonStyle(model.ctaButtonStyle)) jsonObject.put(CHAT_STYLE_KEY, serializeChatStyle(model.chatStyle)) jsonObject.put(SHOW_MUTE_BUTTON_KEY, model.showMuteButton) jsonObject.put(SHOW_PLAYBACK_BUTTON_KEY, model.showPlaybackButton) jsonObject.put(SHOW_BRANDING_KEY, model.showBranding) jsonObject.put(CTA_DELAY_KEY, serializeCtaDelay(model.ctaDelay)) jsonObject.put(CTA_HIGHLIGHT_DELAY_KEY, serializeCtaDelay(model.ctaHighlightDelay)) jsonObject.put(SHARE_BASE_URL_KEY, model.shareBaseUrl) jsonObject.put(CTA_WIDTH_KEY, FWVideoPlayerCTAWidth.serialize(model.ctaWidth)) jsonObject.put(ENABLE_PIP_KEY, model.enablePictureInPicture) jsonObject.put(SHOW_VIDEO_DETAIL_TITLE_KEY, model.showVideoDetailTitle) jsonObject.put(BUTTON_CONFIGURATION_KEY, FWPlayerButtonConfigurationSerializer.serialize(model.buttonConfiguration)) jsonObject.put(VIDEO_PLAYER_LOGO_CONFIGURATION_KEY, FWVideoPlayerLogoConfigurationModelSerializer.serialize(model.videoPlayerLogoConfiguration)) jsonObject.put(COUNT_DOWN_TIMER_CONFIGURATION_KEY, FWCountdownTimerConfigurationModelSerializer.serialize(model.countdownTimerConfiguration)) jsonObject.put(ACTION_BUTTON_STYLE_KEY, FWActionButtonSerializer.serialize(model.actionButtonStyle)) jsonObject.put(CANCEL_BUTTON_STYLE_KEY, FWActionButtonSerializer.serialize(model.cancelButtonStyle)) jsonObject.put(SHOW_FULL_SCREEN_ICON, model.showFullScreenIcon) jsonObject.put(ENABLE_AUTOPLAY, model.enableAutoPlay) jsonObject.put(ENABLE_AUTOPAUSE, model.enableAutoPause) jsonObject.put(ENABLE_SMALL_SIZE_IN_COMPACT, model.enableSmallSizeInCompact) jsonObject.put(SHOULD_EXTEND_MEDIA_OUTSIDE_SAFE_AREA_KEY, model.shouldExtendMediaOutsideSafeArea) jsonObject.put(ADDITIONAL_CONTROLS_INSET_KEY, FWControlsInsetModelSerializer.serialize(model.additionalControlsInset)) jsonObject.put(IS_ARROW_BUTTON_VISIBLE_KEY, model.isArrowButtonVisible) jsonObject.put(IS_FULLSCREEN_ARROW_BUTTON_VISIBLE_KEY, model.isFullscreenArrowButtonVisible) jsonObject.put(SHOW_MORE_BUTTON_KEY, model.showMoreButton) jsonObject.put(SHARE_BUTTON_POSITION_KEY, FWShareButtonPosition.serialize(model.shareButtonPosition)) jsonObject.put(HANDLE_APPEARANCE_MANUALLY_KEY, model.handleAppearanceManually) return jsonObject } private fun serializeCtaButtonStyle(model: FWVideoPlayerConfigModel.FWCtaButtonStyleModel?): JSONObject? { model ?: return null val jsonObject = JSONObject() jsonObject.put(BACKGROUND_COLOR_KEY, model.backgroundColor) jsonObject.put(FONT_SIZE_KEY, model.fontSize) jsonObject.put(TEXT_COLOR_KEY, model.textColor) jsonObject.put(SHAPE_KEY, FWShape.serialize(model.shape)) return jsonObject } private fun serializeChatStyle(model: FWVideoPlayerConfigModel.FWChatStyleModel?): JSONObject? { model ?: return null val jsonObject = JSONObject() jsonObject.put(TEXT_COLOR_KEY, model.textColor) jsonObject.put(TEXT_SHADOW_KEY, serializeTextShadow(model.textShadow)) return jsonObject } private fun serializeTextShadow(model: FWVideoPlayerConfigModel.FWTextShadowModel?): JSONObject? { model ?: return null val jsonObject = JSONObject() jsonObject.put(OPACITY_KEY, model.opacity) jsonObject.put(COLOR_KEY, model.color) jsonObject.put(OFFSET_X_KEY, model.offsetX) jsonObject.put(OFFSET_Y_KEY, model.offsetY) jsonObject.put(RADIUS_KEY, model.radius) return jsonObject } private fun serializeCtaDelay(model: FWVideoPlayerConfigModel.FWCtaDelayModel?): JSONObject? { model ?: return null val jsonObject = JSONObject() jsonObject.put(TYPE_KEY, FWCtaDelayType.serialize(model.type)) jsonObject.put(VALUE_KEY, model.value) return jsonObject } }