package io.tryrook.rook.sdk import com.getcapacitor.JSArray import com.getcapacitor.JSObject import io.tryrook.sdk.samsung.domain.model.SHPhysicalSummary import io.tryrook.sdk.samsung.domain.model.granular.ActiveStepsGranularData import io.tryrook.sdk.samsung.domain.model.granular.ActivityLevelGranularData import io.tryrook.sdk.samsung.domain.model.granular.ElevationGranularData import io.tryrook.sdk.samsung.domain.model.granular.FloorsClimbedGranularData 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.StepsGranularData import io.tryrook.sdk.samsung.domain.model.granular.StressGranularData import io.tryrook.sdk.samsung.domain.model.granular.SwimmingDistanceGranularData import io.tryrook.sdk.samsung.domain.model.granular.TraveledDistanceGranularData import io.tryrook.sdk.samsung.domain.model.granular.Vo2GranularData object SHPhysicalSummaryMapper { fun map(summary: SHPhysicalSummary): JSObject { val js: JSObject = JSObject() js.putOpt("dateTime", summary.dateTime.toISOString()) js.putOpt("stepsPerDayNumber", summary.steps) js.putOpt("activeStepsPerDayNumber", summary.activeSteps) js.putOpt("walkedDistanceMeters", summary.walkedDistanceMeters) js.putOpt("traveledDistanceMeters", summary.traveledDistanceMeters) js.putOpt("floorsClimbedNumber", summary.floorsClimbed) js.putOpt("elevationAvgAltitudeMeters", summary.elevationAvgAltitudeMeters) js.putOpt("elevationMinimumAltitudeMeters", summary.elevationMinimumAltitudeMeters) js.putOpt("elevationMaxAltitudeMeters", summary.elevationMaximumAltitudeMeters) js.putOpt("elevationLossActualAltitudeMeters", summary.elevationLossActualAltitudeMeters) js.putOpt("elevationGainActualAltitudeMeters", summary.elevationGainActualAltitudeMeters) js.putOpt("elevationPlannedGainMeters", summary.elevationPlannedGainMeters) js.putOpt("swimmingStrokesNumber", summary.swimmingNumStrokes) js.putOpt("swimmingNumLapsNumber", summary.swimmingNumLaps) js.putOpt("swimmingPoolLengthMeters", summary.swimmingPoolLengthMeters) js.putOpt("swimmingTotalDistanceMeters", summary.swimmingTotalDistanceMeters) js.putOpt("saturationAvgPercentage", summary.saturationAvgPercentage) js.putOpt("vo2MaxMlPerMinPerKg", summary.vo2MaxMlPerMinPerKg) js.putOpt("activeSeconds", summary.activeSeconds) js.putOpt("restSeconds", summary.restSeconds) js.putOpt("lowIntensitySeconds", summary.lowIntensitySeconds) js.putOpt("moderateIntensitySeconds", summary.moderateIntensitySeconds) js.putOpt("vigorousIntensitySeconds", summary.vigorousIntensitySeconds) js.putOpt("inactivitySeconds", summary.inactivitySeconds) js.putOpt("continuousInactivePeriodsNumber", summary.continuousInactivePeriods) js.putOpt("caloriesNetIntakeKilocalories", summary.caloriesNetIntakeKcal) js.putOpt("caloriesExpenditureKilocalories", summary.caloriesExpenditureKcal) js.putOpt("caloriesNetActiveKilocalories", summary.caloriesNetActiveKcal) js.putOpt("caloriesBasalMetabolicRateKilocalories", summary.caloriesBasalMetabolicRateKcal) 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("stressAtRESTDurationSeconds", summary.stressAtRestDurationSeconds) js.putOpt("stressDurationSeconds", summary.stressDurationSeconds) js.putOpt("lowStressDurationSeconds", summary.lowStressDurationSeconds) js.putOpt("mediumStressDurationSeconds", summary.mediumStressDurationSeconds) js.putOpt("highStressDurationSeconds", summary.highStressDurationSeconds) js.putOpt("stressAvgLevelNumber", summary.stressAvgLevel) js.putOpt("stressMaxLevelNumber", summary.stressMaximumLevel) js.putOpt("stepsGranularDataStepsPerHr", getJSArrayStepsGranular(list = summary.stepsGranularData)) js.putOpt("activeStepsGranularDataStepsPerHr", getJSArrayActiveStepsGranular(list = summary.activeStepsGranularData)) js.putOpt("traveledDistanceGranularDataMeters", getJSArrayTraveledDistanceGranular(list = summary.traveledDistanceGranularData)) js.putOpt("floorsClimbedGranularDataFloors", getJSArrayFloorsClimbedGranular(list = summary.floorsClimbedGranularData)) js.putOpt("elevationGranularDataMeters", getJSArrayElevationGranular(list = summary.elevationGranularData)) js.putOpt("swimmingDistanceGranularDataMeters", getJSArraySwimmingGranular(list = summary.swimmingDistanceGranularData)) js.putOpt("saturationGranularDataPercentage", getJSArraySaturationGranularData(list = summary.saturationGranularData)) js.putOpt("vo2GranularDataLiterPerMin", getJSArrayVo2GranularData(list = summary.vo2GranularData)) js.putOpt("activityLevelGranularDataNumber", getJSArrayActivityLevelGranularData(list = summary.activityLevelGranularData)) js.putOpt("hrGranularDataBPM", getJSArrayHrGranular(summary.hrGranularData)) js.putOpt("hrvSdnnGranularDataNumber", getJSArrayHRVSdnnGranular(summary.hrvSdnnGranularData)) js.putOpt("hrvRmssdGranularDataNumber", getJSArrayHRVRmssGranular(summary.hrvRmssdGranularData)) js.putOpt("stressGranularDataScoreNumber", getJSArrayStressGranular(list = summary.stressGranularData)) return js } private fun getJSArrayStepsGranular(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("steps", item.steps) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayActiveStepsGranular(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("steps", item.activeSteps) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayTraveledDistanceGranular(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("traveledDistanceMeters", item.traveledDistanceMeters) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayFloorsClimbedGranular(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("floorsClimbed", item.floorsClimbed) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArrayElevationGranular(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("elevationChange", item.elevationChangeMeters) jsonArray.put(js) } return jsonArray } else { return null } } private fun getJSArraySwimmingGranular(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("swimmingDistanceMeters", item.swimmingDistanceMeters) 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 getJSArrayActivityLevelGranularData(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("activityLevel", item.activityLevel) 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 getJSArrayStressGranular(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("stressScore", item.stressScore) jsonArray.put(js) } return jsonArray } else { return null } } }