package io.tryrook.rook.sdk import com.getcapacitor.JSArray import com.getcapacitor.JSObject import io.tryrook.sdk.samsung.domain.model.SHSleepSummary import io.tryrook.sdk.samsung.domain.model.complex.TemperatureObject import io.tryrook.sdk.samsung.domain.model.granular.BreathingGranularData import io.tryrook.sdk.samsung.domain.model.granular.HrGranularData import io.tryrook.sdk.samsung.domain.model.granular.HrvRmssdGranularData import io.tryrook.sdk.samsung.domain.model.granular.HrvSdnnGranularData import io.tryrook.sdk.samsung.domain.model.granular.SaturationGranularData import io.tryrook.sdk.samsung.domain.model.granular.SnoringGranularData import io.tryrook.sdk.samsung.domain.model.granular.TemperatureGranularData object SHSleepSummaryMapper { fun map(summary: SHSleepSummary): JSObject { val js: JSObject = JSObject() js.put("datetime", summary.dateTime.toISOString()) js.putOpt("sourceOfData", summary.sourceOfData) js.putOpt("sleepStartDatetime", summary.sleepStartDateTime.toISOString()) js.putOpt("sleepEndDatetime", summary.sleepEndDateTime.toISOString()) js.putOpt("sleepDate", summary.sleepDate.toISODateString()) js.putOpt("sleepDurationSeconds", summary.sleepDurationSeconds) js.putOpt("timeInBedSeconds", summary.timeInBedSeconds) js.putOpt("lightSleepDurationSeconds", summary.lightSleepDurationSeconds) js.putOpt("remSleepDurationSeconds", summary.remSleepDurationSeconds) js.putOpt("deepSleepDurationSeconds", summary.deepSleepDurationSeconds) js.putOpt("timeToFallAsleepSeconds", summary.timeToFallAsleepSeconds) js.putOpt("timeAwakeDuringSleepSeconds", summary.timeAwakeDuringSleepSeconds) js.putOpt("sleepQualityRating1_5_Score", summary.sleepQualityRating1To5Score) js.putOpt("sleepEfficiency1_100_Score", summary.sleepEfficiency1To100Score) js.putOpt("sleepGoalSeconds", summary.sleepGoalSeconds) js.putOpt("sleepContinuity1_5_Score", summary.sleepContinuity1To5Score) js.putOpt("sleepContinuity1_5_Rating", summary.sleepContinuity1To5Rating) js.putOpt("hrMaxBPM", summary.hrMaximumBpm) js.putOpt("hrMinimumBPM", summary.hrMaximumBpm) js.putOpt("hrAvgBPM", summary.hrAvgBpm) js.putOpt("hrRestingBPM", summary.hrRestingBpm) js.putOpt("hrBasalBPM", summary.hrBasalBpm) js.putOpt("hrGranularDataBPM", getJSArrayHrGranular(list = summary.hrGranularData)) js.putOpt("hrvAvgRmssdNumber", summary.hrvAvgRmssd) js.putOpt("hrvAvgSdnnNumber", summary.hrvAvgSdnn) js.putOpt("hrvSdnnGranularData", getJSArrayHRVSdnnGranular(list = summary.hrvSdnnGranularData)) js.putOpt("hrvRmssdGranularData", getJSArrayHRVRmssGranular(list = summary.hrvRmssdGranularData)) js.putOpt("breathsMinimumPerMin", summary.breathsMinimumPerMin) js.putOpt("breathsAvgPerMin", summary.breathsAvgPerMin) js.putOpt("breathsMaxPerMin", summary.breathsMaximumPerMin) js.putOpt("breathingGranularDataBreathsPerMin", getJSArrayBreathingGranular(list = summary.breathingGranularData)) js.putOpt("snoringEventsCountNumber", summary.snoringEventsCount) js.putOpt("snoringDurationTotalSeconds", summary.snoringDurationTotalSeconds) js.putOpt("snoringGranularDataSnores", getJSArraySnoringGranularDataSnores(list = summary.snoringGranularData)) js.putOpt("saturationAvgPercentage", summary.saturationAvgPercentage) js.putOpt("saturationMinPercentage", summary.saturationMinimumPercentage) js.putOpt("saturationMaxPercentage", summary.saturationMaximumPercentage) js.putOpt("saturationGranularDataPercentage", getJSArraySaturationGranularData(list = summary.saturationGranularData)) js.putOpt("temperatureMinimumCelsius", mapTemperatureObject(item = summary.temperatureMinimum)) js.putOpt("temperatureAvgCelsius", mapTemperatureObject(item = summary.temperatureAvg)) js.putOpt("temperatureMaxCelsius", mapTemperatureObject(item = summary.temperatureMaximum)) js.putOpt("temperatureGranularDataCelsius", mapTemperatureGranular(list = summary.temperatureGranularData)) return js } private fun getJSArrayHrGranular(list: List?): JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("hrBPM", item.hrBpm) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayHRVSdnnGranular(list: List??): JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("hrvSDNN", item.hrvSdnn) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayHRVRmssGranular(list: List?): JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("hrvRmssd", item.hrvRmssd) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayBreathingGranular(list: List?): JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("breathsPerMin", item.breathsPerMin) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArraySnoringGranularDataSnores(list: List?) : JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("snoringEventsCountNumber", item.snoringEventsCount) js.putOpt("intervalDurationSeconds", item.intervalDurationSeconds) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArraySaturationGranularData(list: List?) : JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("dateTime", item.dateTime.toISODateString()) js.putOpt("saturationPercentage", item.saturationPercentage) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapTemperatureObject(item: TemperatureObject?) : JSObject? { if (item != null) { val js: JSObject = JSObject() js.putOpt("temperatureCelsius", item.temperatureCelsius) js.putOpt("measurementType", item.measurementType) return js } else { return null } } private fun mapTemperatureGranular(list: List?) : JSArray? { if (list != null) { val jsonArray: JSArray = JSArray() for (item in list) { val js: JSObject = JSObject() js.putOpt("temperatureCelsius", item.temperatureCelsius) js.putOpt("measurementType", item.measurementType) js.putOpt("dateTime", item.dateTime.toISODateString()) jsonArray.put(js) } return jsonArray } else { return null } } }