package com.blaze.rtnblazesdk.events import com.blaze.blazesdk.analytics.models.BlazeAnalyticsEvent import com.blaze.blazesdk.delegates.models.BlazeCTAActionType import com.blaze.blazesdk.delegates.models.BlazePlayerEvent import com.blaze.blazesdk.delegates.models.BlazePlayerType 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) } 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_PARAM_EVENT_DATA = "eventData" } }