package com.shaarit.presentation.deadlinks import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import androidx.paging.PagingData import androidx.paging.cachedIn import com.shaarit.data.local.dao.LinkDao import com.shaarit.domain.model.ShaarliLink import com.shaarit.domain.repository.LinkRepository import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch import javax.inject.Inject @HiltViewModel class DeadLinksViewModel @Inject constructor( private val linkRepository: LinkRepository, private val linkDao: LinkDao ) : ViewModel() { val pagedDeadLinks: Flow> = linkRepository.getDeadLinksStream() .cachedIn(viewModelScope) private val _selectedLinkIds = MutableStateFlow>(emptySet()) val selectedLinkIds: StateFlow> = _selectedLinkIds.asStateFlow() private val _isSelectionMode = MutableStateFlow(false) val isSelectionMode: StateFlow = _isSelectionMode.asStateFlow() fun toggleSelection(linkId: Int) { _selectedLinkIds.value = if (_selectedLinkIds.value.contains(linkId)) { _selectedLinkIds.value - linkId } else { _selectedLinkIds.value + linkId } if (_selectedLinkIds.value.isEmpty()) { _isSelectionMode.value = false } else if (!_isSelectionMode.value) { _isSelectionMode.value = true } } fun clearSelection() { _selectedLinkIds.value = emptySet() _isSelectionMode.value = false } fun excludeSelectedFromHealthCheck() { viewModelScope.launch { val ids = _selectedLinkIds.value.toList() if (ids.isNotEmpty()) { linkDao.updateHealthCheckExclusionBatch(ids, true) clearSelection() } } } fun deleteLink(id: Int) { viewModelScope.launch { linkRepository.deleteLink(id) } } }