package io.tryrook.rook.sdk import com.getcapacitor.JSArray import com.getcapacitor.JSObject import io.tryrook.sdk.samsung.domain.model.SHActivityEvent import io.tryrook.sdk.samsung.domain.model.complex.PositionObject import io.tryrook.sdk.samsung.domain.model.complex.VelocityObject import io.tryrook.sdk.samsung.domain.model.granular.ActivityLevelGranularData import io.tryrook.sdk.samsung.domain.model.granular.CadenceGranularData 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.LapGranularData import io.tryrook.sdk.samsung.domain.model.granular.PositionGranularData import io.tryrook.sdk.samsung.domain.model.granular.PowerGranularData import io.tryrook.sdk.samsung.domain.model.granular.SaturationGranularData import io.tryrook.sdk.samsung.domain.model.granular.SpeedGranularData import io.tryrook.sdk.samsung.domain.model.granular.StepsGranularData import io.tryrook.sdk.samsung.domain.model.granular.SwimmingDistanceGranularData import io.tryrook.sdk.samsung.domain.model.granular.TorqueGranularData import io.tryrook.sdk.samsung.domain.model.granular.TraveledDistanceGranularData import io.tryrook.sdk.samsung.domain.model.granular.TssGranularData import io.tryrook.sdk.samsung.domain.model.granular.Vo2GranularData object SHActivityMapper { fun map(event: SHActivityEvent): JSObject { val js: JSObject = JSObject() js.putOpt("dateTime", event.dateTime.toISOString()) js.putOpt("sourcesOfData", event.sourceOfData) js.putOpt("activityStartTimeDateTime", event.activityStartDateTime.toISOString()) js.putOpt("activityEndTimeDateTime", event.activityEndDateTime.toISOString()) js.putOpt("activityDurationSeconds", event.activityDurationSeconds) js.putOpt("activityTypeName", event.activityTypeName) js.putOpt("activeSeconds", event.activeSeconds) js.putOpt("restSeconds", event.restSeconds) js.putOpt("lowIntensitySeconds", event.lowIntensitySeconds) js.putOpt("moderateIntensitySeconds", event.moderateIntensitySeconds) js.putOpt("vigorousIntensitySeconds", event.vigorousIntensitySeconds) js.putOpt("inactivitySeconds", event.inactivitySeconds) js.putOpt("continuousInactivePeriodsNumber", event.continuousInactivePeriods) js.putOpt("activityStrainLevelNumber", event.activityStrainLevel) js.putOpt("activityWorkKilojoules", event.activityWorkKilojoules) js.putOpt("activityEnergyKilojoules", event.activityEnergyKilojoules) js.putOpt("activityEnergyPlannedKilojoules", event.activityEnergyPlannedKilojoules) js.putOpt("caloriesNetIntakeKilocalories", event.caloriesNetIntakeKcal) js.putOpt("caloriesExpenditureKilocalories", event.caloriesExpenditureKcal) js.putOpt("caloriesNetActiveKilocalories", event.caloriesNetActiveKcal) js.putOpt("caloriesBasalMetabolicRateKilocalories", event.caloriesBasalMetabolicRateKcal) js.putOpt("fatPercentageOfCaloriesPercentage", event.fatPercentageOfCalories) js.putOpt("carbohydratePercentageOfCaloriesPercentage", event.carbohydratePercentageOfCalories) js.putOpt("proteinPercentageOfCaloriesPercentage", event.proteinPercentageOfCalories) js.putOpt("stepsNumber", event.steps) js.putOpt("walkedDistanceMeters", event.walkedDistanceMeters) js.putOpt("traveledDistanceMeters", event.traveledDistanceMeters) js.putOpt("floorsClimbedNumber", event.floorsClimbed) js.putOpt("elevationAvgAltitudeMeters", event.elevationAvgAltitudeMeters) js.putOpt("elevationMinimumAltitudeMeters", event.elevationMinimumAltitudeMeters) js.putOpt("elevationMaxAltitudeMeters", event.elevationMaximumAltitudeMeters) js.putOpt("elevationLossActualAltitudeMeters", event.elevationLossActualAltitudeMeters) js.putOpt("elevationGainActualAltitudeMeters", event.elevationGainActualAltitudeMeters) js.putOpt("elevationPlannedGainMeters", event.elevationPlannedGainMeters) js.putOpt("swimmingNumStrokesNumber", event.swimmingNumStrokes) js.putOpt("swimmingNumLapsNumber", event.swimmingNumLaps) js.putOpt("swimmingPoolLengthMeters", event.swimmingPoolLengthMeters) js.putOpt("swimmingTotalDistanceMeters", event.swimmingTotalDistanceMeters) js.putOpt("hrMaxBPM", event.hrMaximumBpm) js.putOpt("hrMinimumBPM", event.hrMinimumBpm) js.putOpt("hrAvgBPM", event.hrAvgBpm) js.putOpt("hrRestingBPM", event.hrRestingBpm) js.putOpt("hrvAvgRmssdNumber", event.hrvAvgRmssd) js.putOpt("hrvAvgSdnnNumber", event.hrvAvgSdnn) js.putOpt("speedNormalizedMetersPerSecond", event.speedNormalizedMetersPerSecond) js.putOpt("speedAvgMetersPerSecond", event.speedAvgMetersPerSecond) js.putOpt("speedMaxMetersPerSecond", event.speedMaximumMetersPerSecond) js.putOpt("paceAvgMinutesPerKilometer", event.paceAvgMinPerKm) js.putOpt("paceMaxMinutesPerKilometer", event.paceMaximumMinPerKm) js.putOpt("cadenceAvgRPM", event.cadenceAvgRpm) js.putOpt("cadenceMaxRPM", event.cadenceMaximumRpm) js.putOpt("torqueAvgNewtonMeters", event.torqueAvgNewtonMeters) js.putOpt("torqueMaxNewtonMeters", event.torqueMaximumNewtonMeters) js.putOpt("powerAvgWattsNumber", event.powerAvgWatts) js.putOpt("powerMaxWattsNumber", event.powerMaximumWatts) js.putOpt("positionPolylineMapDataSummaryString", event.positionPolylineMapDataSummary) js.putOpt("saturationAvgPercentage", event.saturationAvgPercentage) js.putOpt("vo2MaxMlPerMinPerKg", event.vo2MaxMlPerMinPerKg) js.putOpt("stressAtRESTDurationSeconds", event.stressAtRestDurationSeconds) js.putOpt("stressDurationSeconds", event.stressDurationSeconds) js.putOpt("lowStressDurationSeconds", event.lowStressDurationSeconds) js.putOpt("mediumStressDurationSeconds", event.mediumStressDurationSeconds) js.putOpt("highStressDurationSeconds", event.highStressDurationSeconds) js.putOpt("stressAvgLevelNumber", event.stressAvgLevel) js.putOpt("stressMaxLevelNumber", event.stressMaximumLevel) js.putOpt("activityLevelGranularDataNumber", getJSArrayActivityLevelGranularData(list = event.activityLevelGranularData)) js.putOpt("stepsGranularDataStepsPerMin", getJSArrayStepsGranular(list = event.stepsGranularData)) js.putOpt("traveledDistanceGranularDataMeters", getJSArrayTraveledDistanceGranular(list = event.traveledDistanceGranularData)) js.putOpt("floorsClimbedGranularDataFloorsNumber", getJSArrayFloorsClimbedGranular(list = event.floorsClimbedGranularData)) js.putOpt("elevationGranularDataMeters", getJSArrayElevationGranular(list = event.elevationGranularData)) js.putOpt("swimmingDistanceGranularDataMeters", getJSArraySwimmingGranular(list = event.swimmingDistanceGranularData)) js.putOpt("hrGranularDataBPM", getJSArrayHrGranular(list = event.hrGranularData)) js.putOpt("hrvSdnnGranularDataNumber", getJSArrayHRVSdnnGranular(list = event.hrvSdnnGranularData)) js.putOpt("hrvRmssdGranularDataNumber", getJSArrayHRVRmssGranular(list = event.hrvRmssdGranularData)) js.putOpt("saturationGranularDataPercentage", getJSArraySaturationGranularData(list = event.saturationGranularData)) js.putOpt("vo2GranularDataMlPerMin", getJSArrayVo2GranularData(list = event.vo2GranularData)) js.putOpt("speedGranularDataMetersPerSecond", mapSpeedGranularDataMetersPerSecond(list = event.speedGranularData)) js.putOpt("velocityVectorAvgSpeedAndDirection", mapVelocityVector(event.velocityAvg)) js.putOpt("velocityVectorMaxSpeedAndDirection", mapVelocityVector(event.velocityMaximum)) js.putOpt("cadenceGranularDataRPM", mapCadenceGranular(list = event.cadenceGranularData)) js.putOpt("torqueGranularDataNewtonMeters", mapTorqueGranular(list = event.torqueGranularData)) js.putOpt("lapGranularDataLapsNumber", mapLapGranular(list = event.lapGranularData)) js.putOpt("powerGranularDataWattsNumber", mapPowerGranular(list = event.powerGranularData)) js.putOpt("positionStartLatLngDeg", mapPosition(item = event.positionStart)) js.putOpt("positionCentroidLatLngDeg", mapPosition(item = event.positionCentroid)) js.putOpt("positionEndLatLngDeg", mapPosition(item = event.positionEnd)) js.putOpt("positionGranularDataLatLngDeg", mapPositionGranular(list = event.positionGranularData)) js.putOpt("tssGranularData1_500_ScoreNumber", mapTssGranularData1To500ScoreNumber(list = event.tssGranularData)) 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 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 mapSpeedGranularDataMetersPerSecond(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("speedMetersPerSecond", item.speedMetersPerSecond) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapVelocityVector(item: VelocityObject?): JSObject? { if (item != null) { val js: JSObject = JSObject() js.putOpt("speedMetersPerSecond", item.speedMetersPerSecond) js.putOpt("direction", item.direction) return js } else { return null } } private fun mapCadenceGranular(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("cadenceRPM", item.cadenceRpm) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapTorqueGranular(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("torqueNewtonMeters", item.torqueNewtonMeters) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapLapGranular(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("laps", item.laps) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapPowerGranular(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("powerWatts", item.powerWatts) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapPosition(item: PositionObject?): JSObject? { if (item != null) { val js: JSObject = JSObject() js.putOpt("lat", item.latDeg) js.putOpt("lng", item.lngDeg) return js } else { return null } } private fun mapPositionGranular(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("lat", item.latDeg) js.putOpt("lng", item.lngDeg) jsonArray.put(js) } return jsonArray } else { return null } } private fun mapTssGranularData1To500ScoreNumber(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("tss1_500_Score", item.tssScore) jsonArray.put(js) } return jsonArray } else { return null } } }