package com.jttools.datacontrol.service

import com.jttools.datacontrol.data.DataState
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import java.time.LocalDate
import javax.inject.Inject
import javax.inject.Singleton

data class MonitorSnapshot(
    val consumedMo: Long = 0L,
    val planLimitMo: Long = 0L,
    val overageMo: Long = 0L,
    val estimatedTotalPriceEuro: Double = 0.0,
    val dataState: DataState = DataState.OK,
    val nextAutoResetDate: LocalDate = LocalDate.now(),
    val nextCutoffAtMillis: Long? = null,
    val serviceRunning: Boolean = false
)

/**
 * Point de partage d'état entre [DataMonitorService] (producteur) et l'UI Compose (consommateur),
 * pour que le tableau de bord reflète l'état réel même si l'Activity n'est pas liée au service.
 */
@Singleton
class MonitorStateHolder @Inject constructor() {
    private val _snapshot = MutableStateFlow(MonitorSnapshot())
    val snapshot = _snapshot.asStateFlow()

    fun update(transform: (MonitorSnapshot) -> MonitorSnapshot) {
        _snapshot.value = transform(_snapshot.value)
    }
}
