package com.suno.android.common_analytics.hooks import com.suno.android.common_core_utils.Id import com.suno.android.common_core_utils.model.UserHandle import com.suno.android.common_data.mappers.clips.SongListData import com.suno.android.common_data.metadata.Metadata import com.suno.android.common_data.metadata.MetadataType import com.suno.android.common_data.metadata.Recommendation import com.suno.android.common_data.user.UserProfile import kotlinx.collections.immutable.toPersistentMap import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable @Serializable data class HookAnalyticsContext( @SerialName("startTime") val startTimeSecs: Double, @SerialName("endTime") val endTimeSecs: Double, @SerialName("playDuration") val playDurationSecs: Double, @SerialName("hookSessionId") val hookSessionId: String, @SerialName("previousHookSessionId") val previousHookSessionId: String?, @SerialName("previousClipSessionId") val previousClipSessionId: String?, @SerialName("volume") val volume: Float, @SerialName("platform") val platform: String, @SerialName("isUserHookOwner") val isUserHookOwner: Boolean, @SerialName("clickSourceUrl") val clickSourceUrl: String?, @SerialName("recommendationItemId") val recommendationItemId: String?, @SerialName("isMuted") val isMuted: Boolean, @SerialName("timeToFirstFrame") val timeToFirstFrameSecs: Double?, ) object HookAnalyticsMetadata { private enum class MetadataName( val value: String, ) { RecommendationItemId("recommendationItemId"), MetadataType("contextType"), MetadataId("contextId"), ClipId("clipId"), AuthorHandle("authorHandle"), ProfileUserId("profileUserId"), FeedType("feed_type"), } enum class FeedType( val value: String, ) { Fullscreen("fullscreen"), Carousel("carousel"), } fun createMap( recommendationItemId: Id? = null, metadataType: MetadataType = MetadataType.HooksFeed, metadataId: Id? = null, clipId: Id? = null, authorHandle: UserHandle? = null, profileUserId: Id? = null, feedType: FeedType? = null, ): Map = buildMap { recommendationItemId?.let { put(MetadataName.RecommendationItemId.value, it.value) } put(MetadataName.MetadataType.value, metadataType.value) metadataId?.let { put(MetadataName.MetadataId.value, it.value) } clipId?.let { put(MetadataName.ClipId.value, it.value) } authorHandle?.let { put(MetadataName.AuthorHandle.value, it.handle) } profileUserId?.let { put(MetadataName.ProfileUserId.value, it.value) } feedType?.let { put(MetadataName.FeedType.value, it.value) } }.toPersistentMap() }