package io.tryrook.rook.sdk import com.getcapacitor.JSObject import com.rookmotion.rook.sdk.domain.enums.HCNutritionInsertionEventType import com.rookmotion.rook.sdk.domain.model.HCNutritionInsertionEvent import org.json.JSONObject import java.time.LocalDateTime import java.time.ZoneId import java.time.ZonedDateTime object NutritionEventDTOMapper { fun map(eventDTO: JSObject): HCNutritionInsertionEvent { val date: LocalDateTime = RookDateTime.stringToLocalDateTime(eventDTO.getString("date", "")!!) val nutritionVitaminsDataRelated = eventDTO["nutritionVitaminsDataRelated"] as? JSObject val nutritionCarbohydratesDataRelated = eventDTO["nutritionCarbohydratesDataRelated"] as? JSObject val nutritionMineralDataRelated = eventDTO["nutritionMineralDataRelated"] as? JSObject val nutritionInsertionEnergyWaterDataRelated = eventDTO["nutritionInsertionEnergyWaterDataRelated"] as? JSObject val nutritionProteinDataRelated = eventDTO["nutritionProteinDataRelated"] as? JSObject val nutritionFatsDataRelated = eventDTO["nutritionFatsDataRelated"] as? JSObject val zonedDateTime: ZonedDateTime = date.atZone(ZoneId.systemDefault()) val event = HCNutritionInsertionEvent( startDateTime = zonedDateTime, endDateTime = zonedDateTime, name = eventDTO.getString("name", "")!!, type = getNutritionType(eventDTO.getString("type", "")!!), biotinGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramBiotin"), caffeineGrams = nutritionCarbohydratesDataRelated?.optDoubleOrNull("dietaryGramCaffeine"), calciumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsCalcium"), energyKcal = nutritionInsertionEnergyWaterDataRelated?.optDoubleOrNull("dietaryKiloCaloriesEnergyConsumed"), energyFromFatKcal = nutritionInsertionEnergyWaterDataRelated?.optDoubleOrNull("dietaryKiloCaloriesEnergyConsumed"), chlorideGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsChloride"), cholesterolGrams = nutritionProteinDataRelated?.optDoubleOrNull("dietaryMilliGramCholesterol"), chromiumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsChromium"), copperGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsCopper"), dietaryFiberGrams = nutritionCarbohydratesDataRelated?.optDoubleOrNull("dietaryGramFiber"), folateGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramFolate"), folicAcidGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryGramFolicAcid"), iodineGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsIodine"), ironGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsIron"), magnesiumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsMagnesium"), manganeseGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsMagnesium"), molybdenumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsMolybdenum"), monounsaturatedFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryGramFatMonounsaturated"), niacinGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramNiacin"), pantothenicAcidGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramPantothenicAcid"), phosphorusGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsPhosphorus"), polyunsaturatedFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryGramFatPolyunsaturated"), potassiumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsPotassium"), proteinGrams = nutritionProteinDataRelated?.optDoubleOrNull("dietaryGramProtein"), riboflavinGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramRiboflavin"), saturatedFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryGramFatSaturated"), seleniumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsSelenium"), sodiumGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsSodium"), sugarGrams = nutritionCarbohydratesDataRelated?.optDoubleOrNull("dietaryGramSugar"), thiaminGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramThiamin"), totalCarbohydrateGrams = nutritionCarbohydratesDataRelated?.optDoubleOrNull("dietaryGramCarbohydrates"), totalFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryGramFatTotal"), transFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryGramTransFat"), unsaturatedFatGrams = nutritionFatsDataRelated?.optDoubleOrNull("dietaryUnsaturatedFat"), vitaminAGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramVitaminA"), vitaminB12Grams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramVitaminB12"), vitaminB6Grams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramVitaminB6"), vitaminCGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramVitaminC"), vitaminDGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramVitaminD"), vitaminEGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMilliGramVitaminE"), vitaminKGrams = nutritionVitaminsDataRelated?.optDoubleOrNull("dietaryMicroGramVitaminK"), zincGrams = nutritionMineralDataRelated?.optDoubleOrNull("dietaryMilliGramsZinc") ) return event } fun getNutritionType(type: String): HCNutritionInsertionEventType { var typeToReturn: HCNutritionInsertionEventType = HCNutritionInsertionEventType.BREAKFAST when (type) { "BREAKFAST" -> typeToReturn = HCNutritionInsertionEventType.BREAKFAST "LUNCH" -> typeToReturn = HCNutritionInsertionEventType.LUNCH "DINNER" -> typeToReturn = HCNutritionInsertionEventType.DINNER "SNACK" -> typeToReturn = HCNutritionInsertionEventType.SNACK } return typeToReturn } private fun JSObject.optDoubleOrNull(key: String): Double? { if (!has(key) || isNull(key)) return null val v = opt(key) return when (v) { is Number -> v.toDouble() is String -> v.toDoubleOrNull() else -> null } } }