package com.suno.android.common_data.repos import com.suno.android.common_core_utils.Id import com.suno.android.common_core_utils.model.Url import com.suno.android.common_data.mappers.clips.SongListData import com.suno.android.common_data.mappers.hooks.LocalHookData import com.suno.android.common_data.metadata.RecommendationMetadata import com.suno.android.common_data.metadata.toRemoteMetadata import com.suno.android.common_networking.extensions.ApiResult import com.suno.android.common_networking.remote.entities.RemoteShareLinkBody import com.suno.android.common_networking.remote.share.ShareLinkService import javax.inject.Inject private const val SOURCE = "android" private const val CONTENT_TYPE_SONG = "song" private const val CONTENT_TYPE_HOOK = "hook" // todo extract interface class ShareLinkRepository @Inject constructor( private val remote: ShareLinkService, ) { suspend fun getSongShareLink( contentId: Id, platform: String, ): ApiResult = getShareLink( contentId = contentId, contentType = CONTENT_TYPE_SONG, platform = platform, recommendationMetadata = null, ) suspend fun getHookShareLink( contentId: Id, platform: String, recommendationMetadata: RecommendationMetadata?, ): ApiResult = getShareLink( contentId = contentId, contentType = CONTENT_TYPE_HOOK, platform = platform, recommendationMetadata = recommendationMetadata, ) private suspend fun getShareLink( contentId: Id<*>, contentType: String, platform: String, recommendationMetadata: RecommendationMetadata?, ): ApiResult { val body = RemoteShareLinkBody( contentType = contentType, contentId = contentId.value, source = SOURCE, platform = platform, recommendationMetadata = recommendationMetadata?.toRemoteMetadata(), ) return remote.getShareLink(body).map { it.link?.let(::Url) } } }