# This file was auto-generated by Fern from our API Definition.

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class TimeseriesResource(str, enum.Enum):
    CALORIES_ACTIVE = "calories_active"
    CALORIES_BASAL = "calories_basal"
    DISTANCE = "distance"
    BLOOD_OXYGEN = "blood_oxygen"
    BLOOD_PRESSURE = "blood_pressure"
    BODY_FAT = "body_fat"
    BODY_WEIGHT = "body_weight"
    BODY_TEMPERATURE = "body_temperature"
    BODY_TEMPERATURE_DELTA = "body_temperature_delta"
    CHOLESTEROL = "cholesterol"
    CHOLESTEROL_LDL = "cholesterol/ldl"
    CHOLESTEROL_HDL = "cholesterol/hdl"
    CHOLESTEROL_TOTAL = "cholesterol/total"
    CHOLESTEROL_TRIGLYCERIDES = "cholesterol/triglycerides"
    ELECTROCARDIOGRAM_VOLTAGE = "electrocardiogram_voltage"
    FLOORS_CLIMBED = "floors_climbed"
    GLUCOSE = "glucose"
    HEARTRATE = "heartrate"
    HRV = "hrv"
    HYPNOGRAM = "hypnogram"
    IGE = "ige"
    IGG = "igg"
    RESPIRATORY_RATE = "respiratory_rate"
    STEPS = "steps"
    STRESS_LEVEL = "stress_level"
    VO_2_MAX = "vo2_max"
    WATER = "water"
    CAFFEINE = "caffeine"
    MINDFULNESS_MINUTES = "mindfulness_minutes"
    AFIB_BURDEN = "afib_burden"
    HEART_RATE_ALERT = "heart_rate_alert"
    WORKOUT_DURATION = "workout_duration"
    INSULIN_INJECTION = "insulin_injection"
    CARBOHYDRATES = "carbohydrates"
    NOTE = "note"

    def visit(
        self,
        calories_active: typing.Callable[[], T_Result],
        calories_basal: typing.Callable[[], T_Result],
        distance: typing.Callable[[], T_Result],
        blood_oxygen: typing.Callable[[], T_Result],
        blood_pressure: typing.Callable[[], T_Result],
        body_fat: typing.Callable[[], T_Result],
        body_weight: typing.Callable[[], T_Result],
        body_temperature: typing.Callable[[], T_Result],
        body_temperature_delta: typing.Callable[[], T_Result],
        cholesterol: typing.Callable[[], T_Result],
        cholesterol_ldl: typing.Callable[[], T_Result],
        cholesterol_hdl: typing.Callable[[], T_Result],
        cholesterol_total: typing.Callable[[], T_Result],
        cholesterol_triglycerides: typing.Callable[[], T_Result],
        electrocardiogram_voltage: typing.Callable[[], T_Result],
        floors_climbed: typing.Callable[[], T_Result],
        glucose: typing.Callable[[], T_Result],
        heartrate: typing.Callable[[], T_Result],
        hrv: typing.Callable[[], T_Result],
        hypnogram: typing.Callable[[], T_Result],
        ige: typing.Callable[[], T_Result],
        igg: typing.Callable[[], T_Result],
        respiratory_rate: typing.Callable[[], T_Result],
        steps: typing.Callable[[], T_Result],
        stress_level: typing.Callable[[], T_Result],
        vo_2_max: typing.Callable[[], T_Result],
        water: typing.Callable[[], T_Result],
        caffeine: typing.Callable[[], T_Result],
        mindfulness_minutes: typing.Callable[[], T_Result],
        afib_burden: typing.Callable[[], T_Result],
        heart_rate_alert: typing.Callable[[], T_Result],
        workout_duration: typing.Callable[[], T_Result],
        insulin_injection: typing.Callable[[], T_Result],
        carbohydrates: typing.Callable[[], T_Result],
        note: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is TimeseriesResource.CALORIES_ACTIVE:
            return calories_active()
        if self is TimeseriesResource.CALORIES_BASAL:
            return calories_basal()
        if self is TimeseriesResource.DISTANCE:
            return distance()
        if self is TimeseriesResource.BLOOD_OXYGEN:
            return blood_oxygen()
        if self is TimeseriesResource.BLOOD_PRESSURE:
            return blood_pressure()
        if self is TimeseriesResource.BODY_FAT:
            return body_fat()
        if self is TimeseriesResource.BODY_WEIGHT:
            return body_weight()
        if self is TimeseriesResource.BODY_TEMPERATURE:
            return body_temperature()
        if self is TimeseriesResource.BODY_TEMPERATURE_DELTA:
            return body_temperature_delta()
        if self is TimeseriesResource.CHOLESTEROL:
            return cholesterol()
        if self is TimeseriesResource.CHOLESTEROL_LDL:
            return cholesterol_ldl()
        if self is TimeseriesResource.CHOLESTEROL_HDL:
            return cholesterol_hdl()
        if self is TimeseriesResource.CHOLESTEROL_TOTAL:
            return cholesterol_total()
        if self is TimeseriesResource.CHOLESTEROL_TRIGLYCERIDES:
            return cholesterol_triglycerides()
        if self is TimeseriesResource.ELECTROCARDIOGRAM_VOLTAGE:
            return electrocardiogram_voltage()
        if self is TimeseriesResource.FLOORS_CLIMBED:
            return floors_climbed()
        if self is TimeseriesResource.GLUCOSE:
            return glucose()
        if self is TimeseriesResource.HEARTRATE:
            return heartrate()
        if self is TimeseriesResource.HRV:
            return hrv()
        if self is TimeseriesResource.HYPNOGRAM:
            return hypnogram()
        if self is TimeseriesResource.IGE:
            return ige()
        if self is TimeseriesResource.IGG:
            return igg()
        if self is TimeseriesResource.RESPIRATORY_RATE:
            return respiratory_rate()
        if self is TimeseriesResource.STEPS:
            return steps()
        if self is TimeseriesResource.STRESS_LEVEL:
            return stress_level()
        if self is TimeseriesResource.VO_2_MAX:
            return vo_2_max()
        if self is TimeseriesResource.WATER:
            return water()
        if self is TimeseriesResource.CAFFEINE:
            return caffeine()
        if self is TimeseriesResource.MINDFULNESS_MINUTES:
            return mindfulness_minutes()
        if self is TimeseriesResource.AFIB_BURDEN:
            return afib_burden()
        if self is TimeseriesResource.HEART_RATE_ALERT:
            return heart_rate_alert()
        if self is TimeseriesResource.WORKOUT_DURATION:
            return workout_duration()
        if self is TimeseriesResource.INSULIN_INJECTION:
            return insulin_injection()
        if self is TimeseriesResource.CARBOHYDRATES:
            return carbohydrates()
        if self is TimeseriesResource.NOTE:
            return note()
