package io.tryrook.rook.sdk import com.getcapacitor.JSArray import com.getcapacitor.JSObject import io.tryrook.sdk.samsung.domain.model.SHBodySummary import io.tryrook.sdk.samsung.domain.model.complex.BloodPressureObject import io.tryrook.sdk.samsung.domain.model.complex.TemperatureObject import io.tryrook.sdk.samsung.domain.model.granular.BloodGlucoseGranularData import io.tryrook.sdk.samsung.domain.model.granular.BloodPressureGranularData 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.HydrationAmountGranularData import io.tryrook.sdk.samsung.domain.model.granular.HydrationLevelGranularData import io.tryrook.sdk.samsung.domain.model.granular.MoodGranularData import io.tryrook.sdk.samsung.domain.model.granular.SaturationGranularData import io.tryrook.sdk.samsung.domain.model.granular.TemperatureGranularData import io.tryrook.sdk.samsung.domain.model.granular.Vo2GranularData object SHBodySummaryMapper { fun map(summary: SHBodySummary): JSObject { val js: JSObject = JSObject() js.putOpt("dateTime", summary.dateTime.toISOString()) js.putOpt("waistCircumferenceCMNumber", summary.waistCircumferenceCm) js.putOpt("hipCircumferenceCMNumber", summary.hipCircumferenceCm) js.putOpt("chestCircumferenceCMNumber", summary.chestCircumferenceCm) js.putOpt("boneCompositionPercentageNumber", summary.boneCompositionPercentage) js.putOpt("muscleCompositionPercentageNumber", summary.muscleCompositionPercentage) js.putOpt("waterCompositionPercentageNumber", summary.waterCompositionPercentage) js.putOpt("weightKgNumber", summary.weightKg) js.putOpt("heightCMNumber", summary.heightCm) js.putOpt("bmiNumber", summary.bmi) js.putOpt("bloodGlucoseDayAvgMgPerDLNumber", summary.bloodGlucoseAvgMgPerDl) js.putOpt("waterTotalConsumptionMlNumber", summary.waterTotalConsumptionMl) js.putOpt("hrMaxBPM", summary.hrMaximumBpm) js.putOpt("hrMinimumBPM", summary.hrMinimumBpm) js.putOpt("hrAvgBPM", summary.hrAvgBpm) js.putOpt("hrRestingBPM", summary.hrRestingBpm) js.putOpt("hrvAvgRmssdNumber", summary.hrvAvgRmssd) js.putOpt("hrvAvgSdnnNumber", summary.hrvAvgSdnn) js.putOpt("moodMinimumScale", summary.moodMinimumScale) js.putOpt("moodAvgScale", summary.moodAvgScale) js.putOpt("moodMaxScale", summary.moodMaximumScale) js.putOpt("moodDeltaScale", summary.moodDeltaScale) js.putOpt("foodIntakeNumber", summary.foodIntake) js.putOpt("caloriesIntakeNumber", summary.caloriesIntakeKcal) js.putOpt("proteinIntakeGNumber", summary.proteinIntakeG) js.putOpt("sugarIntakeGNumber", summary.sugarIntakeG) js.putOpt("fatIntakeGNumber", summary.fatIntakeG) js.putOpt("transFatIntakeGNumber", summary.transFatIntakeG) js.putOpt("carbohydratesIntakeGNumber", summary.carbohydratesIntakeG) js.putOpt("fiberIntakeGNumber", summary.fiberIntakeG) js.putOpt("alcoholIntakeGNumber", summary.alcoholIntakeG) js.putOpt("sodiumIntakeMgNumber", summary.sodiumIntakeMg) js.putOpt("cholesterolIntakeMgNumber", summary.cholesterolIntakeMg) js.putOpt("saturationAvgPercentage", summary.saturationAvgPercentage) js.putOpt("vo2MaxMlPerMinPerKg", summary.vo2MaxMlPerMinPerKg) js.putOpt("bloodGlucoseGranularDataMgPerDL", getJSArrayGlucoseGranular(list = summary.bloodGlucoseGranularData)) js.putOpt("bloodPressureDayAvgSystolicDiastolicBpNumber", mapBloodPressureToJSArray(item = summary.bloodPressureAvg)) js.putOpt("bloodPressureGranularDataSystolicDiastolicBpNumber", mapBloodPressureGranularToJSArray(list = summary.bloodPressureGranularData)) js.putOpt("hydrationAmountGranularDataMlNumber", mapHydrationAmountGranularToJSArray(list = summary.hydrationAmountGranularData)) js.putOpt("hydrationLevelGranularDataPercentageNumber", mapHydrationLevelGranularToJSArray(list = summary.hydrationLevelGranularData)) js.putOpt("hrGranularDataBPM", getJSArrayHrGranular(list = summary.hrGranularData)) js.putOpt("hrvSdnnGranularDataNumber", getJSArrayHRVSdnnGranular(list = summary.hrvSdnnGranularData)) js.putOpt("hrvRmssdGranularDataNumber", getJSArrayHRVRmssGranular(list = summary.hrvRmssdGranularData)) js.putOpt("moodGranularDataScale", mapMoodGranularToJSArray(list = summary.moodGranularData)) js.putOpt("saturationGranularDataPercentage", getJSArraySaturationGranularData(list = summary.saturationGranularData)) js.putOpt("vo2GranularDataLiterPerMin", getJSArrayVo2GranularData(list = summary.vo2GranularData)) js.putOpt("temperatureMinimumCelsius", mapTemperatureObject(item = summary.temperatureMinimum)) js.putOpt("temperatureAvgCelsius", mapTemperatureObject(item = summary.temperatureAvg)) js.putOpt("temperatureMaxCelsius", mapTemperatureObject(item = summary.temperatureMaximum)) js.putOpt("temperatureDeltaCelsius", mapTemperatureObject(item = summary.temperatureDelta)) js.putOpt("temperatureGranularDataCelsius", mapTemperatureGranular(list = summary.temperatureGranularData)) return js } private fun mapMoodGranularToJSArray(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("intervalDurationSeconds", item.intervalDurationSeconds) js.putOpt("moodScale", item.moodScale) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayGlucoseGranular(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("bloodGlucoseMgPerDL", item.bloodGlucoseMgPerDl) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapBloodPressureToJSArray(item: BloodPressureObject?): JSObject? { if (item != null) { val js: JSObject = JSObject() js.putOpt("systolicBp", item.systolicMmHg) js.putOpt("diastolicBp", item.diastolicMmHg) return js } else { return null } } private fun mapBloodPressureGranularToJSArray(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("systolicBp", item.systolicMmHg) js.putOpt("diastolicBp", item.diastolicMmHg) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapHydrationAmountGranularToJSArray(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("intervalDurationSeconds", item.intervalDurationSeconds) js.putOpt("hydrationAmountMl", item.hydrationAmountMl) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapHydrationLevelGranularToJSArray(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("intervalDurationSeconds", item.intervalDurationSeconds) js.putOpt("hydrationLevelPercentage", item.hydrationLevelPercentage) jsonArray.put(js) } return jsonArray } else { return null } } 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 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 getJSArrayVo2GranularData(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("vo2MlPerMinPerKg", item.vo2MlPerMinPerKg) 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 } } }