package com.blaze.rtnblazesdk.events import com.blaze.blazesdk.analytics.models.BlazeAnalyticsEvent import com.blaze.blazesdk.delegates.models.BlazeCTAActionType import com.blaze.blazesdk.style.shared.models.BlazePlayerCustomActionButtonParams import com.blaze.blazesdk.delegates.models.BlazePlayerEvent import com.blaze.blazesdk.delegates.models.BlazePlayerType import com.blaze.blazesdk.delegates.BlazeCastingState import com.blaze.blazesdk.delegates.BlazePipState import com.blaze.blazesdk.shared.results.BlazeResult import com.blaze.rtnblazesdk.utils.EventParamsBuilder import com.blaze.rtnblazesdk.utils.toReactValue import com.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap sealed interface SdkModuleJsEvent { val eventName: String val params: WritableMap data class ErrorThrown(val error: BlazeResult.Error) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_ERROR_THROWN override val params: WritableMap = Arguments.createMap().apply { putString("error", error.toReactValue()) } } data class AnalyticEventTriggered(val eventData: BlazeAnalyticsEvent) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_EVENT_TRIGGERED override val params: WritableMap = Arguments.createMap().apply { putString(KEY_PARAM_EVENT_DATA, eventData.asJsonString) } } data class DataLoadCompleted( val playerType: BlazePlayerType, val sourceId: String?, val itemsCount: Int, val result: BlazeResult ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_DATA_LOAD_COMPLETED override val params: WritableMap = EventParamsBuilder.buildDataLoadCompletedParams( playerType, sourceId, itemsCount, result ) } data class DataLoadStarted(val playerType: BlazePlayerType, val sourceId: String?) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_DATA_LOAD_STARTED override val params: WritableMap = EventParamsBuilder.buildDataLoadStartedParams(playerType, sourceId) } data class PlayerDidAppear(val playerType: BlazePlayerType, val sourceId: String?) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_PLAYER_DID_APPEAR override val params: WritableMap = EventParamsBuilder.buildPlayerDidAppearParams(playerType, sourceId) } data class PlayerDidDismiss(val playerType: BlazePlayerType, val sourceId: String?) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_PLAYER_DID_DISMISSED override val params: WritableMap = EventParamsBuilder.buildPlayerDidDismissParams(playerType, sourceId) } data class TriggerCTA( val playerType: BlazePlayerType, val sourceId: String?, val actionType: BlazeCTAActionType, val actionParam: String ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_TRIGGER_CTA override val params: WritableMap = EventParamsBuilder.buildTriggerCTAParams( playerType, sourceId, actionType, actionParam ) } data class TriggerPlayerBodyTextLink( val playerType: BlazePlayerType, val sourceId: String?, val actionParam: String ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_TRIGGER_PLAYER_BODY_TEXT_LINK override val params: WritableMap = EventParamsBuilder.buildTriggerPlayerBodyTextLinkParams( playerType, sourceId, actionParam ) } data class TriggerPlayerEventTriggered( val playerType: BlazePlayerType, val sourceId: String?, val event: BlazePlayerEvent ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_TRIGGER_PLAYER_EVENT_TRIGGERED override val params: WritableMap = EventParamsBuilder.buildPlayerEventTriggeredParams(playerType, sourceId, event) } data class TriggerCustomActionButton( val playerType: BlazePlayerType, val sourceId: String?, val customParams: BlazePlayerCustomActionButtonParams ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_TRIGGER_CUSTOM_ACTION_BUTTON override val params: WritableMap = EventParamsBuilder.buildTriggerCustomActionButtonParams(playerType, sourceId, customParams) } data class ReadStatusChanged( val playerType: BlazePlayerType, val sourceId: String?, val dataSourceStringRepresentation: String, val isEntireContentRead: Boolean, val itemReadStatus: Map ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_READ_STATUS_CHANGED override val params: WritableMap = EventParamsBuilder.buildReadStatusChangedParams(playerType, sourceId, dataSourceStringRepresentation, isEntireContentRead, itemReadStatus) } data class FollowEntityClicked( val playerType: BlazePlayerType, val sourceId: String?, val newFollowingState: Boolean, val followEntityId: String ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_FOLLOW_ENTITY_CLICKED override val params: WritableMap = EventParamsBuilder.buildFollowEntityClickedParams( playerType, sourceId, newFollowingState, followEntityId ) } data class CastingStateChanged( val playerType: BlazePlayerType, val sourceId: String?, val newState: BlazeCastingState ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_CASTING_STATE_CHANGED override val params: WritableMap = Arguments.createMap().apply { putString("playerType", EventParamsBuilder.run { playerType.mapToReact() }) putString("sourceId", sourceId) putString("state", newState.name.lowercase()) } } data class PiPStateChanged( val playerType: BlazePlayerType, val sourceId: String?, val newState: BlazePipState ) : SdkModuleJsEvent { override val eventName = KEY_EVENT_NAME_PIP_STATE_CHANGED override val params: WritableMap = Arguments.createMap().apply { putString("playerType", EventParamsBuilder.run { playerType.mapToReact() }) putString("sourceId", sourceId) putString("state", newState.name.lowercase()) } } companion object { private const val KEY_EVENT_NAME_ERROR_THROWN = "Blaze.onErrorThrown" private const val KEY_EVENT_NAME_EVENT_TRIGGERED = "Blaze.onEventTriggered" private const val KEY_EVENT_NAME_DATA_LOAD_COMPLETED = "Blaze.onDataLoadComplete" private const val KEY_EVENT_NAME_DATA_LOAD_STARTED = "Blaze.onDataLoadStarted" private const val KEY_EVENT_NAME_PLAYER_DID_APPEAR = "Blaze.onPlayerDidAppear" private const val KEY_EVENT_NAME_PLAYER_DID_DISMISSED = "Blaze.onPlayerDidDismiss" private const val KEY_EVENT_NAME_TRIGGER_CTA = "Blaze.onTriggerCTA" private const val KEY_EVENT_NAME_TRIGGER_PLAYER_BODY_TEXT_LINK = "Blaze.onTriggerPlayerBodyTextLink" private const val KEY_EVENT_NAME_TRIGGER_PLAYER_EVENT_TRIGGERED = "Blaze.onPlayerEventTriggered" private const val KEY_EVENT_NAME_TRIGGER_CUSTOM_ACTION_BUTTON = "Blaze.onTriggerCustomActionButton" private const val KEY_EVENT_NAME_READ_STATUS_CHANGED = "Blaze.onReadStatusChanged" private const val KEY_EVENT_NAME_FOLLOW_ENTITY_CLICKED = "Blaze.onFollowEntityClicked" private const val KEY_EVENT_NAME_CASTING_STATE_CHANGED = "Blaze.onCastingStateChanged" private const val KEY_EVENT_NAME_PIP_STATE_CHANGED = "Blaze.onPiPStateChanged" private const val KEY_PARAM_EVENT_DATA = "eventData" } }