package dev.jdtech.jellyfin.viewmodels import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import dev.jdtech.jellyfin.adapters.EpisodeItem import dev.jdtech.jellyfin.repository.JellyfinRepository import java.util.UUID import javax.inject.Inject import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import org.jellyfin.sdk.model.api.ItemFields @HiltViewModel class SeasonViewModel @Inject constructor( private val jellyfinRepository: JellyfinRepository ) : ViewModel() { private val _uiState = MutableStateFlow(UiState.Loading) val uiState = _uiState.asStateFlow() sealed class UiState { data class Normal(val episodes: List) : UiState() object Loading : UiState() data class Error(val error: Exception) : UiState() } fun loadEpisodes(seriesId: UUID, seasonId: UUID) { viewModelScope.launch { _uiState.emit(UiState.Loading) try { val episodes = getEpisodes(seriesId, seasonId) _uiState.emit(UiState.Normal(episodes)) } catch (e: Exception) { _uiState.emit(UiState.Error(e)) } } } private suspend fun getEpisodes(seriesId: UUID, seasonId: UUID): List { val episodes = jellyfinRepository.getEpisodes(seriesId, seasonId, fields = listOf(ItemFields.OVERVIEW)) return listOf(EpisodeItem.Header) + episodes.map { EpisodeItem.Episode(it) } } }