package com.suno.android.common_data.repos import com.suno.android.common_core_utils.Id import com.suno.android.common_core_utils.SunoLogger import com.suno.android.common_data.mappers.clips.SongListData import com.suno.android.common_networking.remote.entities.ActionSpec import com.suno.android.common_networking.remote.entities.PlayCountSpec import com.suno.android.common_networking.remote.gen.GenService import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton @Singleton internal class DefaultClipMetricsRepository @Inject constructor( loggerFactory: SunoLogger.Factory, private val genService: GenService, ) : ClipMetricsRepository { private val logger = loggerFactory.create(this@DefaultClipMetricsRepository) override suspend fun incrementActionCount( clipId: Id, action: ClipAction, sharePlatform: String?, ): Result = withContext(Dispatchers.IO) { Result.runCatching { genService.incrementActionCount( genId = clipId.value, actionSpec = ActionSpec( action = action.value, sharePlatform = sharePlatform, ), ) }.onFailure { logger.e(it) } } override suspend fun incrementPlayCount( clipId: String, ): Result = withContext(Dispatchers.IO) { Result.runCatching { logger.d { "Incrementing play count for clip id: $clipId" } genService.incrementPlayCountWithSpec( genId = clipId, playCountSpec = PlayCountSpec(sampleFactor = 1), ) }.onFailure { logger.e(it) } } }