package mx.trackermap.TrackerMap.utils import kotlinx.coroutines.DelicateCoroutinesApi import kotlinx.datetime.* @DelicateCoroutinesApi class ReportDates { enum class ReportPeriod { TODAY, LAST_24, YESTERDAY, THIS_WEEK, LAST_7, THIS_MONTH, LAST_30 } companion object { private fun formatDateTime(dateTime: LocalDateTime, timezone: TimeZone) = dateTime.toInstant(timezone).toString() fun getDates(period: ReportPeriod): Pair { val timezone = TimeZone.currentSystemDefault() val clock = Clock.System val instant = clock.now() val dateTime = instant.toLocalDateTime(timezone) val date = dateTime.date var currentDate: LocalDateTime? = null var previousDate: LocalDateTime? = null when (period) { ReportPeriod.TODAY -> { previousDate = date.atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_24 -> { previousDate = instant .minus(1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone) currentDate = dateTime } ReportPeriod.YESTERDAY -> { val yesterday = instant .minus(1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date previousDate = yesterday.atTime(0, 0) currentDate = yesterday.atTime(23, 59) } ReportPeriod.THIS_WEEK -> { previousDate = instant .minus(date.dayOfWeek.isoDayNumber - 1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_7 -> { previousDate = instant .minus(1, DateTimeUnit.WEEK, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.THIS_MONTH -> { previousDate = instant .minus(date.dayOfMonth - 1, DateTimeUnit.DAY, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } ReportPeriod.LAST_30 -> { previousDate = instant .minus(1, DateTimeUnit.MONTH, timezone) .toLocalDateTime(timezone).date .atTime(0, 0) currentDate = dateTime } } return Pair( formatDateTime(currentDate, timezone), formatDateTime(previousDate, timezone) ) } } }