package com.blaze.rtnblazesdk.utils 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.facebook.react.bridge.Arguments import com.facebook.react.bridge.WritableMap /** * Shared helper class for building event parameters to eliminate duplication between widget events * and SDK module events. */ object EventParamsBuilder { /** Extension function to map BlazePlayerType to React string values */ fun BlazePlayerType.mapToReact(): String { return when (this) { BlazePlayerType.MOMENTS -> "Moments" BlazePlayerType.STORIES -> "Stories" BlazePlayerType.VIDEOS -> "Videos" } } /** Builds parameters for data load started events */ fun buildDataLoadStartedParams(playerType: BlazePlayerType, sourceId: String?): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) } } /** Builds parameters for data load completed events */ fun buildDataLoadCompletedParams( playerType: BlazePlayerType, sourceId: String?, itemsCount: Int, result: BlazeResult? ): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) putInt("itemsCount", itemsCount) if (result is BlazeResult.Error) { putString("error", result.toReactValue()) } } } /** Builds parameters for player did appear events */ fun buildPlayerDidAppearParams(playerType: BlazePlayerType, sourceId: String?): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) } } /** Builds parameters for player did dismiss events */ fun buildPlayerDidDismissParams(playerType: BlazePlayerType, sourceId: String?): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) } } /** Builds parameters for trigger CTA events */ fun buildTriggerCTAParams( playerType: BlazePlayerType, sourceId: String?, actionType: BlazeCTAActionType, actionParam: String ): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) putString("actionType", actionType.mapToReact()) putString("actionParam", actionParam) } } /** Builds parameters for trigger player body text link events */ fun buildTriggerPlayerBodyTextLinkParams( playerType: BlazePlayerType, sourceId: String?, actionParam: String ): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) putString("actionParam", actionParam) } } /** Builds parameters for player event triggered events */ fun buildPlayerEventTriggeredParams( playerType: BlazePlayerType, sourceId: String?, event: BlazePlayerEvent ): WritableMap { return Arguments.createMap().apply { putString("playerType", playerType.mapToReact()) putString("sourceId", sourceId) putString("playerEventType", event.toReactEventType()) putString("playerEventParams", event.toReactEventParams()) } } /** Builds parameters for widget item clicked events */ fun buildWidgetItemClickedParams( sourceId: String?, widgetItemId: String, widgetItemTitle: String? ): WritableMap { return Arguments.createMap().apply { putString("sourceId", sourceId) putString("widgetItemId", widgetItemId) putString("widgetItemTitle", widgetItemTitle) } } }