package com.suno.android.common_data.repos.orpheus import com.suno.android.common_core_utils.Id import com.suno.android.common_data.mappers.clips.SongListData import com.suno.android.common_data.mappers.projects.BaseProjectMetadata import com.suno.android.common_data.repos.orpheus.models.OrpheusMessage sealed class OrpheusSessionEvent { /** * Add a message to the current session. */ data class AddMessage( val message: OrpheusMessage, ) : OrpheusSessionEvent() /** * Update a specific message via a transform function. * If clipIdsToFetch is provided, the repository will fetch those clips and update the message. */ data class UpdateMessage( val messageId: Id, val transform: (OrpheusMessage) -> OrpheusMessage, val clipIdsToFetch: Set>? = null, ) : OrpheusSessionEvent() /** * Update the project for the session. */ data class UpdateProject( val project: BaseProjectMetadata?, ) : OrpheusSessionEvent() /** * No operation - indicates the event was processed but no state change is needed. */ data object NoOp : OrpheusSessionEvent() }