IntDefMappings.kt

/*
 * Copyright 2023 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

@file:RestrictTo(RestrictTo.Scope.LIBRARY)
@file:RequiresApi(api = 34)

package androidx.health.connect.client.impl.platform.records

import androidx.annotation.RequiresApi
import androidx.annotation.RestrictTo
import androidx.health.connect.client.records.BloodGlucoseRecord
import androidx.health.connect.client.records.BloodPressureRecord
import androidx.health.connect.client.records.BodyTemperatureMeasurementLocation
import androidx.health.connect.client.records.CervicalMucusRecord
import androidx.health.connect.client.records.ExerciseSegment
import androidx.health.connect.client.records.ExerciseSessionRecord
import androidx.health.connect.client.records.MealType
import androidx.health.connect.client.records.MenstruationFlowRecord
import androidx.health.connect.client.records.OvulationTestRecord
import androidx.health.connect.client.records.SexualActivityRecord
import androidx.health.connect.client.records.SleepSessionRecord
import androidx.health.connect.client.records.Vo2MaxRecord
import androidx.health.connect.client.records.metadata.Metadata

internal val SDK_TO_PLATFORM_CERVICAL_MUCUS_APPEARANCE: Map<Int, Int> =
    mapOf(
        CervicalMucusRecord.APPEARANCE_EGG_WHITE to
            PlatformCervicalMucusAppearance.APPEARANCE_EGG_WHITE,
        CervicalMucusRecord.APPEARANCE_DRY to PlatformCervicalMucusAppearance.APPEARANCE_DRY,
        CervicalMucusRecord.APPEARANCE_STICKY to PlatformCervicalMucusAppearance.APPEARANCE_STICKY,
        CervicalMucusRecord.APPEARANCE_CREAMY to PlatformCervicalMucusAppearance.APPEARANCE_CREAMY,
        CervicalMucusRecord.APPEARANCE_WATERY to PlatformCervicalMucusAppearance.APPEARANCE_WATERY,
        CervicalMucusRecord.APPEARANCE_UNUSUAL to
            PlatformCervicalMucusAppearance.APPEARANCE_UNUSUAL,
    )

internal val PLATFORM_TO_SDK_CERVICAL_MUCUS_APPEARANCE =
    SDK_TO_PLATFORM_CERVICAL_MUCUS_APPEARANCE.reversed()

internal val SDK_TO_PLATFORM_BLOOD_PRESSURE_BODY_POSITION: Map<Int, Int> =
    mapOf(
        BloodPressureRecord.BODY_POSITION_STANDING_UP to
            PlatformBloodPressureBodyPosition.BODY_POSITION_STANDING_UP,
        BloodPressureRecord.BODY_POSITION_SITTING_DOWN to
            PlatformBloodPressureBodyPosition.BODY_POSITION_SITTING_DOWN,
        BloodPressureRecord.BODY_POSITION_LYING_DOWN to
            PlatformBloodPressureBodyPosition.BODY_POSITION_LYING_DOWN,
        BloodPressureRecord.BODY_POSITION_RECLINING to
            PlatformBloodPressureBodyPosition.BODY_POSITION_RECLINING,
    )

internal val PLATFORM_TO_SDK_BLOOD_PRESSURE_BODY_POSITION =
    SDK_TO_PLATFORM_BLOOD_PRESSURE_BODY_POSITION.reversed()

internal val SDK_TO_PLATFORM_EXERCISE_SESSION_TYPE: Map<Int, Int> =
    mapOf(
        ExerciseSessionRecord.EXERCISE_TYPE_OTHER_WORKOUT to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_OTHER_WORKOUT,
        ExerciseSessionRecord.EXERCISE_TYPE_BADMINTON to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BADMINTON,
        ExerciseSessionRecord.EXERCISE_TYPE_BASEBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BASEBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_BASKETBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BASKETBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_BIKING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BIKING,
        ExerciseSessionRecord.EXERCISE_TYPE_BIKING_STATIONARY to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BIKING_STATIONARY,
        ExerciseSessionRecord.EXERCISE_TYPE_BOOT_CAMP to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BOOT_CAMP,
        ExerciseSessionRecord.EXERCISE_TYPE_BOXING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_BOXING,
        ExerciseSessionRecord.EXERCISE_TYPE_CALISTHENICS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_CALISTHENICS,
        ExerciseSessionRecord.EXERCISE_TYPE_CRICKET to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_CRICKET,
        ExerciseSessionRecord.EXERCISE_TYPE_DANCING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_DANCING,
        ExerciseSessionRecord.EXERCISE_TYPE_ELLIPTICAL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ELLIPTICAL,
        ExerciseSessionRecord.EXERCISE_TYPE_EXERCISE_CLASS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_EXERCISE_CLASS,
        ExerciseSessionRecord.EXERCISE_TYPE_FENCING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_FENCING,
        ExerciseSessionRecord.EXERCISE_TYPE_FOOTBALL_AMERICAN to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_FOOTBALL_AMERICAN,
        ExerciseSessionRecord.EXERCISE_TYPE_FOOTBALL_AUSTRALIAN to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_FOOTBALL_AUSTRALIAN,
        ExerciseSessionRecord.EXERCISE_TYPE_FRISBEE_DISC to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_FRISBEE_DISC,
        ExerciseSessionRecord.EXERCISE_TYPE_GOLF to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GOLF,
        ExerciseSessionRecord.EXERCISE_TYPE_GUIDED_BREATHING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GUIDED_BREATHING,
        ExerciseSessionRecord.EXERCISE_TYPE_GYMNASTICS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_GYMNASTICS,
        ExerciseSessionRecord.EXERCISE_TYPE_HANDBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_HANDBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
        ExerciseSessionRecord.EXERCISE_TYPE_HIKING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_HIKING,
        ExerciseSessionRecord.EXERCISE_TYPE_ICE_HOCKEY to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ICE_HOCKEY,
        ExerciseSessionRecord.EXERCISE_TYPE_ICE_SKATING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ICE_SKATING,
        ExerciseSessionRecord.EXERCISE_TYPE_MARTIAL_ARTS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_MARTIAL_ARTS,
        ExerciseSessionRecord.EXERCISE_TYPE_PADDLING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_PADDLING,
        ExerciseSessionRecord.EXERCISE_TYPE_PARAGLIDING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_PARAGLIDING,
        ExerciseSessionRecord.EXERCISE_TYPE_PILATES to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_PILATES,
        ExerciseSessionRecord.EXERCISE_TYPE_RACQUETBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_RACQUETBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_ROCK_CLIMBING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ROCK_CLIMBING,
        ExerciseSessionRecord.EXERCISE_TYPE_ROLLER_HOCKEY to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ROLLER_HOCKEY,
        ExerciseSessionRecord.EXERCISE_TYPE_ROWING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ROWING,
        ExerciseSessionRecord.EXERCISE_TYPE_ROWING_MACHINE to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_ROWING_MACHINE,
        ExerciseSessionRecord.EXERCISE_TYPE_RUGBY to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_RUGBY,
        ExerciseSessionRecord.EXERCISE_TYPE_RUNNING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_RUNNING,
        ExerciseSessionRecord.EXERCISE_TYPE_RUNNING_TREADMILL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_RUNNING_TREADMILL,
        ExerciseSessionRecord.EXERCISE_TYPE_SAILING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SAILING,
        ExerciseSessionRecord.EXERCISE_TYPE_SCUBA_DIVING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SCUBA_DIVING,
        ExerciseSessionRecord.EXERCISE_TYPE_SKATING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SKATING,
        ExerciseSessionRecord.EXERCISE_TYPE_SKIING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SKIING,
        ExerciseSessionRecord.EXERCISE_TYPE_SNOWBOARDING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SNOWBOARDING,
        ExerciseSessionRecord.EXERCISE_TYPE_SNOWSHOEING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SNOWSHOEING,
        ExerciseSessionRecord.EXERCISE_TYPE_SOCCER to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SOCCER,
        ExerciseSessionRecord.EXERCISE_TYPE_SOFTBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SOFTBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_SQUASH to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SQUASH,
        ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_STAIR_CLIMBING,
        ExerciseSessionRecord.EXERCISE_TYPE_STAIR_CLIMBING_MACHINE to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_STAIR_CLIMBING_MACHINE,
        ExerciseSessionRecord.EXERCISE_TYPE_STRENGTH_TRAINING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_STRENGTH_TRAINING,
        ExerciseSessionRecord.EXERCISE_TYPE_STRETCHING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_STRETCHING,
        ExerciseSessionRecord.EXERCISE_TYPE_SURFING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SURFING,
        ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_OPEN_WATER to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SWIMMING_OPEN_WATER,
        ExerciseSessionRecord.EXERCISE_TYPE_SWIMMING_POOL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_SWIMMING_POOL,
        ExerciseSessionRecord.EXERCISE_TYPE_TABLE_TENNIS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_TABLE_TENNIS,
        ExerciseSessionRecord.EXERCISE_TYPE_TENNIS to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_TENNIS,
        ExerciseSessionRecord.EXERCISE_TYPE_VOLLEYBALL to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_VOLLEYBALL,
        ExerciseSessionRecord.EXERCISE_TYPE_WALKING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_WALKING,
        ExerciseSessionRecord.EXERCISE_TYPE_WATER_POLO to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_WATER_POLO,
        ExerciseSessionRecord.EXERCISE_TYPE_WEIGHTLIFTING to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_WEIGHTLIFTING,
        ExerciseSessionRecord.EXERCISE_TYPE_WHEELCHAIR to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_WHEELCHAIR,
        ExerciseSessionRecord.EXERCISE_TYPE_YOGA to
            PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_YOGA,
    )

internal val PLATFORM_TO_SDK_EXERCISE_SESSION_TYPE =
    SDK_TO_PLATFORM_EXERCISE_SESSION_TYPE.reversed()

internal val SDK_TO_PLATFORM_MEAL_TYPE: Map<Int, Int> =
    mapOf(
        MealType.MEAL_TYPE_BREAKFAST to PlatformMealType.MEAL_TYPE_BREAKFAST,
        MealType.MEAL_TYPE_LUNCH to PlatformMealType.MEAL_TYPE_LUNCH,
        MealType.MEAL_TYPE_DINNER to PlatformMealType.MEAL_TYPE_DINNER,
        MealType.MEAL_TYPE_SNACK to PlatformMealType.MEAL_TYPE_SNACK,
    )

internal val PLATFORM_TO_SDK_MEAL_TYPE = SDK_TO_PLATFORM_MEAL_TYPE.reversed()

internal val SDK_TO_PLATFORM_VO2_MAX_MEASUREMENT_METHOD: Map<Int, Int> =
    mapOf(
        Vo2MaxRecord.MEASUREMENT_METHOD_METABOLIC_CART to
            PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_METABOLIC_CART,
        Vo2MaxRecord.MEASUREMENT_METHOD_HEART_RATE_RATIO to
            PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_HEART_RATE_RATIO,
        Vo2MaxRecord.MEASUREMENT_METHOD_COOPER_TEST to
            PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_COOPER_TEST,
        Vo2MaxRecord.MEASUREMENT_METHOD_MULTISTAGE_FITNESS_TEST to
            PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_MULTISTAGE_FITNESS_TEST,
        Vo2MaxRecord.MEASUREMENT_METHOD_ROCKPORT_FITNESS_TEST to
            PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_ROCKPORT_FITNESS_TEST,
    )

internal val PLATFORM_TO_SDK_VO2_MAX_MEASUREMENT_METHOD =
    SDK_TO_PLATFORM_VO2_MAX_MEASUREMENT_METHOD.reversed()

internal val SDK_TO_PLATFORM_MENSTRUATION_FLOW_TYPE: Map<Int, Int> =
    mapOf(
        MenstruationFlowRecord.FLOW_LIGHT to PlatformMenstruationFlowType.FLOW_LIGHT,
        MenstruationFlowRecord.FLOW_MEDIUM to PlatformMenstruationFlowType.FLOW_MEDIUM,
        MenstruationFlowRecord.FLOW_HEAVY to PlatformMenstruationFlowType.FLOW_HEAVY,
    )

internal val PLATFORM_TO_SDK_MENSTRUATION_FLOW_TYPE =
    SDK_TO_PLATFORM_MENSTRUATION_FLOW_TYPE.reversed()

internal val SDK_TO_PLATFORM_BODY_TEMPERATURE_MEASUREMENT_LOCATION: Map<Int, Int> =
    mapOf(
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_ARMPIT to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_ARMPIT,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_FINGER to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_FINGER,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_FOREHEAD to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_FOREHEAD,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_MOUTH to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_MOUTH,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_RECTUM to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_RECTUM,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_TEMPORAL_ARTERY to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_TEMPORAL_ARTERY,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_TOE to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_TOE,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_EAR to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_EAR,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_WRIST to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_WRIST,
        BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_VAGINA to
            PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_VAGINA,
    )

internal val PLATFORM_TO_SDK_BODY_TEMPERATURE_MEASUREMENT_LOCATION =
    SDK_TO_PLATFORM_BODY_TEMPERATURE_MEASUREMENT_LOCATION.reversed()

internal val SDK_TO_PLATFORM_BLOOD_PRESSURE_MEASUREMENT_LOCATION: Map<Int, Int> =
    mapOf(
        BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_WRIST to
            PlatformBloodPressureMeasurementLocation.BLOOD_PRESSURE_MEASUREMENT_LOCATION_LEFT_WRIST,
        BloodPressureRecord.MEASUREMENT_LOCATION_RIGHT_WRIST to
            PlatformBloodPressureMeasurementLocation
                .BLOOD_PRESSURE_MEASUREMENT_LOCATION_RIGHT_WRIST,
        BloodPressureRecord.MEASUREMENT_LOCATION_LEFT_UPPER_ARM to
            PlatformBloodPressureMeasurementLocation
                .BLOOD_PRESSURE_MEASUREMENT_LOCATION_LEFT_UPPER_ARM,
        BloodPressureRecord.MEASUREMENT_LOCATION_RIGHT_UPPER_ARM to
            PlatformBloodPressureMeasurementLocation
                .BLOOD_PRESSURE_MEASUREMENT_LOCATION_RIGHT_UPPER_ARM,
    )

internal val PLATFORM_TO_SDK_BLOOD_PRESSURE_MEASUREMENT_LOCATION =
    SDK_TO_PLATFORM_BLOOD_PRESSURE_MEASUREMENT_LOCATION.reversed()

internal val SDK_TO_PLATFORM_OVULATION_TEST_RESULT: Map<Int, Int> =
    mapOf(
        OvulationTestRecord.RESULT_POSITIVE to PlatformOvulationTestResult.RESULT_POSITIVE,
        OvulationTestRecord.RESULT_HIGH to PlatformOvulationTestResult.RESULT_HIGH,
        OvulationTestRecord.RESULT_NEGATIVE to PlatformOvulationTestResult.RESULT_NEGATIVE,
        OvulationTestRecord.RESULT_INCONCLUSIVE to PlatformOvulationTestResult.RESULT_INCONCLUSIVE,
    )

internal val PLATFORM_TO_SDK_OVULATION_TEST_RESULT =
    SDK_TO_PLATFORM_OVULATION_TEST_RESULT.reversed()

internal val SDK_TO_PLATFORM_CERVICAL_MUCUS_SENSATION: Map<Int, Int> =
    mapOf(
        CervicalMucusRecord.SENSATION_LIGHT to PlatformCervicalMucusSensation.SENSATION_LIGHT,
        CervicalMucusRecord.SENSATION_MEDIUM to PlatformCervicalMucusSensation.SENSATION_MEDIUM,
        CervicalMucusRecord.SENSATION_HEAVY to PlatformCervicalMucusSensation.SENSATION_HEAVY,
    )

internal val PLATFORM_TO_SDK_CERVICAL_MUCUS_SENSATION =
    SDK_TO_PLATFORM_CERVICAL_MUCUS_SENSATION.reversed()

internal val SDK_TO_PLATFORM_SEXUAL_ACTIVITY_PROTECTION_USED: Map<Int, Int> =
    mapOf(
        SexualActivityRecord.PROTECTION_USED_PROTECTED to
            PlatformSexualActivityProtectionUsed.PROTECTION_USED_PROTECTED,
        SexualActivityRecord.PROTECTION_USED_UNPROTECTED to
            PlatformSexualActivityProtectionUsed.PROTECTION_USED_UNPROTECTED,
    )

internal val PLATFORM_TO_SDK_SEXUAL_ACTIVITY_PROTECTION_USED =
    SDK_TO_PLATFORM_SEXUAL_ACTIVITY_PROTECTION_USED.reversed()

internal val SDK_TO_PLATFORM_BLOOD_GLUCOSE_SPECIMEN_SOURCE: Map<Int, Int> =
    mapOf(
        BloodGlucoseRecord.SPECIMEN_SOURCE_INTERSTITIAL_FLUID to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_INTERSTITIAL_FLUID,
        BloodGlucoseRecord.SPECIMEN_SOURCE_CAPILLARY_BLOOD to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_CAPILLARY_BLOOD,
        BloodGlucoseRecord.SPECIMEN_SOURCE_PLASMA to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_PLASMA,
        BloodGlucoseRecord.SPECIMEN_SOURCE_SERUM to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_SERUM,
        BloodGlucoseRecord.SPECIMEN_SOURCE_TEARS to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_TEARS,
        BloodGlucoseRecord.SPECIMEN_SOURCE_WHOLE_BLOOD to
            PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_WHOLE_BLOOD,
    )

internal val PLATFORM_TO_SDK_GLUCOSE_SPECIMEN_SOURCE =
    SDK_TO_PLATFORM_BLOOD_GLUCOSE_SPECIMEN_SOURCE.reversed()

internal val SDK_TO_PLATFORM_BLOOD_GLUCOSE_RELATION_TO_MEAL: Map<Int, Int> =
    mapOf(
        BloodGlucoseRecord.RELATION_TO_MEAL_GENERAL to
            PlatformBloodGlucoseRelationToMeal.RELATION_TO_MEAL_GENERAL,
        BloodGlucoseRecord.RELATION_TO_MEAL_FASTING to
            PlatformBloodGlucoseRelationToMeal.RELATION_TO_MEAL_FASTING,
        BloodGlucoseRecord.RELATION_TO_MEAL_BEFORE_MEAL to
            PlatformBloodGlucoseRelationToMeal.RELATION_TO_MEAL_BEFORE_MEAL,
        BloodGlucoseRecord.RELATION_TO_MEAL_AFTER_MEAL to
            PlatformBloodGlucoseRelationToMeal.RELATION_TO_MEAL_AFTER_MEAL,
    )

internal val PLATFORM_TO_SDK_BLOOD_GLUCOSE_RELATION_TO_MEAL =
    SDK_TO_PLATFORM_BLOOD_GLUCOSE_RELATION_TO_MEAL.reversed()

internal val SDK_TO_PLATFORM_SLEEP_STAGE_TYPE: Map<Int, Int> =
    mapOf(
        SleepSessionRecord.STAGE_TYPE_AWAKE to PlatformSleepStageType.STAGE_TYPE_AWAKE,
        SleepSessionRecord.STAGE_TYPE_SLEEPING to PlatformSleepStageType.STAGE_TYPE_SLEEPING,
        SleepSessionRecord.STAGE_TYPE_OUT_OF_BED to
            PlatformSleepStageType.STAGE_TYPE_AWAKE_OUT_OF_BED,
        SleepSessionRecord.STAGE_TYPE_LIGHT to PlatformSleepStageType.STAGE_TYPE_SLEEPING_LIGHT,
        SleepSessionRecord.STAGE_TYPE_DEEP to PlatformSleepStageType.STAGE_TYPE_SLEEPING_DEEP,
        SleepSessionRecord.STAGE_TYPE_REM to PlatformSleepStageType.STAGE_TYPE_SLEEPING_REM,
        SleepSessionRecord.STAGE_TYPE_AWAKE_IN_BED to PlatformSleepStageType.STAGE_TYPE_AWAKE_IN_BED
    )

internal val PLATFORM_TO_SDK_SLEEP_STAGE_TYPE = SDK_TO_PLATFORM_SLEEP_STAGE_TYPE.reversed()

internal val SDK_TO_PLATFORM_EXERCISE_SEGMENT_TYPE: Map<Int, Int> =
    mapOf(
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_ARM_CURL to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_ARM_CURL,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BACK_EXTENSION to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BACK_EXTENSION,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BALL_SLAM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BALL_SLAM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BARBELL_SHOULDER_PRESS,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BENCH_PRESS to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BENCH_PRESS,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BENCH_SIT_UP,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BIKING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BIKING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BIKING_STATIONARY,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_BURPEE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_BURPEE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_CRUNCH to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_CRUNCH,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DEADLIFT to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DEADLIFT,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DOUBLE_ARM_TRICEPS_EXTENSION,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_LEFT_ARM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_CURL_RIGHT_ARM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_FRONT_RAISE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_LATERAL_RAISE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_ROW,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_LEFT_ARM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_RIGHT_ARM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_DUMBBELL_TRICEPS_EXTENSION_TWO_ARM,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_ELLIPTICAL to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_ELLIPTICAL,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_FORWARD_TWIST to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_FORWARD_TWIST,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_FRONT_RAISE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_FRONT_RAISE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_HIGH_INTENSITY_INTERVAL_TRAINING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_HIP_THRUST to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_HIP_THRUST,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_HULA_HOOP to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_HULA_HOOP,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_JUMPING_JACK to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_JUMPING_JACK,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_JUMP_ROPE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_JUMP_ROPE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_KETTLEBELL_SWING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LATERAL_RAISE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LATERAL_RAISE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LAT_PULL_DOWN,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LEG_CURL to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LEG_CURL,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LEG_EXTENSION to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LEG_EXTENSION,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LEG_PRESS to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LEG_PRESS,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LEG_RAISE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LEG_RAISE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_LUNGE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_LUNGE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_MOUNTAIN_CLIMBER,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_OTHER_WORKOUT,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_PAUSE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_PAUSE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_PILATES to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_PILATES,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_PLANK to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_PLANK,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_PULL_UP to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_PULL_UP,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_PUNCH to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_PUNCH,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_REST to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_REST,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_ROWING_MACHINE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_ROWING_MACHINE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_RUNNING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_RUNNING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_RUNNING_TREADMILL,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SHOULDER_PRESS,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SINGLE_ARM_TRICEPS_EXTENSION,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SIT_UP to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SIT_UP,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SQUAT to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SQUAT,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_STAIR_CLIMBING_MACHINE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_STRETCHING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_STRETCHING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_BACKSTROKE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_BREASTSTROKE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_BUTTERFLY,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_FREESTYLE,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_MIXED,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_OPEN_WATER,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_OTHER,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_SWIMMING_POOL to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_SWIMMING_POOL,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_UPPER_TWIST to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_UPPER_TWIST,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_WALKING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_WALKING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_WEIGHTLIFTING,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_WHEELCHAIR to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_WHEELCHAIR,
        ExerciseSegment.EXERCISE_SEGMENT_TYPE_YOGA to
            PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_YOGA,
    )

internal val PLATFORM_TO_SDK_EXERCISE_SEGMENT_TYPE =
    SDK_TO_PLATFORM_EXERCISE_SEGMENT_TYPE.reversed()

internal val SDK_TO_PLATFORM_RECORDING_METHOD: Map<Int, Int> =
    mapOf(
        Metadata.RECORDING_METHOD_ACTIVELY_RECORDED to
            PlatformMetadata.RECORDING_METHOD_ACTIVELY_RECORDED,
        Metadata.RECORDING_METHOD_AUTOMATICALLY_RECORDED to
            PlatformMetadata.RECORDING_METHOD_AUTOMATICALLY_RECORDED,
        Metadata.RECORDING_METHOD_MANUAL_ENTRY to PlatformMetadata.RECORDING_METHOD_MANUAL_ENTRY
    )

internal val PLATFORM_TO_SDK_RECORDING_METHOD: Map<Int, Int> =
    SDK_TO_PLATFORM_RECORDING_METHOD.reversed()

internal fun Int.toPlatformCervicalMucusAppearance(): Int {
    return SDK_TO_PLATFORM_CERVICAL_MUCUS_APPEARANCE[this]
        ?: PlatformCervicalMucusAppearance.APPEARANCE_UNKNOWN
}

internal fun Int.toPlatformBloodPressureBodyPosition(): Int {
    return SDK_TO_PLATFORM_BLOOD_PRESSURE_BODY_POSITION[this]
        ?: PlatformBloodPressureBodyPosition.BODY_POSITION_UNKNOWN
}

internal fun Int.toPlatformExerciseSessionType(): Int {
    return SDK_TO_PLATFORM_EXERCISE_SESSION_TYPE[this]
        ?: PlatformExerciseSessionType.EXERCISE_SESSION_TYPE_UNKNOWN
}

internal fun Int.toPlatformExerciseSegmentType(): Int {
    return SDK_TO_PLATFORM_EXERCISE_SEGMENT_TYPE[this]
        ?: PlatformExerciseSegmentType.EXERCISE_SEGMENT_TYPE_UNKNOWN
}

internal fun Int.toPlatformMealType(): Int {
    return SDK_TO_PLATFORM_MEAL_TYPE[this] ?: PlatformMealType.MEAL_TYPE_UNKNOWN
}

internal fun Int.toPlatformVo2MaxMeasurementMethod(): Int {
    return SDK_TO_PLATFORM_VO2_MAX_MEASUREMENT_METHOD[this]
        ?: PlatformVo2MaxMeasurementMethod.MEASUREMENT_METHOD_OTHER
}

internal fun Int.toPlatformMenstruationFlow(): Int {
    return SDK_TO_PLATFORM_MENSTRUATION_FLOW_TYPE[this] ?: PlatformMenstruationFlowType.FLOW_UNKNOWN
}

internal fun Int.toPlatformBodyTemperatureMeasurementLocation(): Int {
    return SDK_TO_PLATFORM_BODY_TEMPERATURE_MEASUREMENT_LOCATION[this]
        ?: PlatformBodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_UNKNOWN
}

internal fun Int.toPlatformBloodPressureMeasurementLocation(): Int {
    return SDK_TO_PLATFORM_BLOOD_PRESSURE_MEASUREMENT_LOCATION[this]
        ?: PlatformBloodPressureMeasurementLocation.BLOOD_PRESSURE_MEASUREMENT_LOCATION_UNKNOWN
}

internal fun Int.toPlatformOvulationTestResult(): Int {
    return SDK_TO_PLATFORM_OVULATION_TEST_RESULT[this]
        ?: PlatformOvulationTestResult.RESULT_INCONCLUSIVE
}

internal fun Int.toPlatformCervicalMucusSensation(): Int {
    return SDK_TO_PLATFORM_CERVICAL_MUCUS_SENSATION[this]
        ?: PlatformCervicalMucusSensation.SENSATION_UNKNOWN
}

internal fun Int.toPlatformSexualActivityProtectionUsed(): Int {
    return SDK_TO_PLATFORM_SEXUAL_ACTIVITY_PROTECTION_USED[this]
        ?: PlatformSexualActivityProtectionUsed.PROTECTION_USED_UNKNOWN
}

internal fun Int.toPlatformBloodGlucoseSpecimenSource(): Int {
    return SDK_TO_PLATFORM_BLOOD_GLUCOSE_SPECIMEN_SOURCE[this]
        ?: PlatformBloodGlucoseSpecimenSource.SPECIMEN_SOURCE_UNKNOWN
}

internal fun Int.toPlatformBloodGlucoseRelationToMeal(): Int {
    return SDK_TO_PLATFORM_BLOOD_GLUCOSE_RELATION_TO_MEAL[this]
        ?: PlatformBloodGlucoseRelationToMeal.RELATION_TO_MEAL_UNKNOWN
}

internal fun Int.toPlatformSleepStageType(): Int {
    return SDK_TO_PLATFORM_SLEEP_STAGE_TYPE[this] ?: PlatformSleepStageType.STAGE_TYPE_UNKNOWN
}

internal fun Int.toPlatformRecordingMethod(): Int {
    return SDK_TO_PLATFORM_RECORDING_METHOD[this] ?: PlatformMetadata.RECORDING_METHOD_UNKNOWN
}

internal fun Int.toSdkBloodPressureBodyPosition(): Int {
    return PLATFORM_TO_SDK_BLOOD_PRESSURE_BODY_POSITION[this]
        ?: BloodPressureRecord.BODY_POSITION_UNKNOWN
}

internal fun Int.toSdkBloodPressureMeasurementLocation(): Int {
    return PLATFORM_TO_SDK_BLOOD_PRESSURE_MEASUREMENT_LOCATION[this]
        ?: BloodPressureRecord.MEASUREMENT_LOCATION_UNKNOWN
}

internal fun Int.toSdkExerciseSessionType(): Int {
    return PLATFORM_TO_SDK_EXERCISE_SESSION_TYPE[this]
        ?: ExerciseSessionRecord.EXERCISE_TYPE_OTHER_WORKOUT
}

internal fun Int.toSdkExerciseSegmentType(): Int {
    return PLATFORM_TO_SDK_EXERCISE_SEGMENT_TYPE[this]
        ?: ExerciseSegment.EXERCISE_SEGMENT_TYPE_UNKNOWN
}

internal fun Int.toSdkVo2MaxMeasurementMethod(): Int {
    return PLATFORM_TO_SDK_VO2_MAX_MEASUREMENT_METHOD[this] ?: Vo2MaxRecord.MEASUREMENT_METHOD_OTHER
}

internal fun Int.toSdkMenstruationFlow(): Int {
    return PLATFORM_TO_SDK_MENSTRUATION_FLOW_TYPE[this] ?: MenstruationFlowRecord.FLOW_UNKNOWN
}

internal fun Int.toSdkProtectionUsed(): Int {
    return PLATFORM_TO_SDK_SEXUAL_ACTIVITY_PROTECTION_USED[this]
        ?: SexualActivityRecord.PROTECTION_USED_UNKNOWN
}

internal fun Int.toSdkCervicalMucusSensation(): Int {
    return PLATFORM_TO_SDK_CERVICAL_MUCUS_SENSATION[this] ?: CervicalMucusRecord.SENSATION_UNKNOWN
}

internal fun Int.toSdkBloodGlucoseSpecimenSource(): Int {
    return PLATFORM_TO_SDK_GLUCOSE_SPECIMEN_SOURCE[this]
        ?: BloodGlucoseRecord.SPECIMEN_SOURCE_UNKNOWN
}

internal fun Int.toSdkMealType(): Int {
    return PLATFORM_TO_SDK_MEAL_TYPE[this] ?: MealType.MEAL_TYPE_UNKNOWN
}

internal fun Int.toSdkOvulationTestResult(): Int {
    return PLATFORM_TO_SDK_OVULATION_TEST_RESULT[this] ?: OvulationTestRecord.RESULT_INCONCLUSIVE
}

internal fun Int.toSdkRelationToMeal(): Int {
    return PLATFORM_TO_SDK_BLOOD_GLUCOSE_RELATION_TO_MEAL[this]
        ?: BloodGlucoseRecord.RELATION_TO_MEAL_UNKNOWN
}

internal fun Int.toSdkBodyTemperatureMeasurementLocation(): Int {
    return PLATFORM_TO_SDK_BODY_TEMPERATURE_MEASUREMENT_LOCATION[this]
        ?: BodyTemperatureMeasurementLocation.MEASUREMENT_LOCATION_UNKNOWN
}

internal fun Int.toSdkCervicalMucusAppearance(): Int {
    return PLATFORM_TO_SDK_CERVICAL_MUCUS_APPEARANCE[this] ?: CervicalMucusRecord.APPEARANCE_UNKNOWN
}

internal fun Int.toSdkSleepStageType(): Int {
    return PLATFORM_TO_SDK_SLEEP_STAGE_TYPE[this] ?: SleepSessionRecord.STAGE_TYPE_UNKNOWN
}

internal fun Int.toSdkRecordingMethod(): Int {
    return PLATFORM_TO_SDK_RECORDING_METHOD[this] ?: Metadata.RECORDING_METHOD_UNKNOWN
}

private fun Map<Int, Int>.reversed(): Map<Int, Int> {
    return entries.associate { (k, v) -> v to k }
}