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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class ServiceType(str, enum.Enum):
    NEW_PATIENT_VIDEO_APPT = "new_patient_video_appt"
    NEW_PATIENT_PREV_VIDEO_APPT = "new_patient_prev_video_appt"
    NEW_PATIENT_OFFICE_APPT = "new_patient_office_appt"
    ESTABLISHED_PATIENT_VIDEO_APPT = "established_patient_video_appt"
    ESTABLISHED_PATIENT_PREV_VIDEO_APPT = "established_patient_prev_video_appt"
    ESTABLISHED_PATIENT_OFFICE_APPT = "established_patient_office_appt"
    PATIENT_PORTAL_WITH_QUALIFIED_PHYSICIAN = "patient_portal_with_qualified_physician"
    PATIENT_PORTAL_WITH_NON_QUALIFIED_PHYSICIAN = "patient_portal_with_non_qualified_physician"
    GROUP_THERAPY = "group_therapy"
    PHONE_APPT = "phone_appt"
    ANNUAL_WELLNESS_VISIT = "annual_wellness_visit"
    REMOTE_PATIENT_MONITORING = "remote_patient_monitoring"
    DIAGNOSTIC = "diagnostic"
    CARDIAC_MONITORING = "cardiac_monitoring"
    CARDIAC_CODES = "cardiac_codes"
    PSYCHOTHERAPY = "psychotherapy"
    PHONE_THERAPY = "phone_therapy"
    ALCOHOL_ABUSE = "alcohol_abuse"
    SMOKING_CESSATION = "smoking_cessation"
    SPEECH_THERAPY = "speech_therapy"
    HOME_VISIT = "home_visit"
    MEDICAL_NUTRITION_THERAPY = "medical_nutrition_therapy"
    NUTRITIONAL_COUNSELING = "nutritional_counseling"
    DIETITIAN_VISIT = "dietitian_visit"
    PREVENTATIVE_MEDICINE_COUNSELING = "preventative_medicine_counseling"
    CHRONIC_CARE = "chronic_care"
    ADVANCE_CARE = "advance_care"
    COLLABORATIVE_CARE_MANAGEMENT = "collaborative_care_management"
    ABORTION_CARE = "abortion_care"
    ABORTION_DRUGS = "abortion_drugs"
    REMOTE_THERAPEUTIC_MONITORING = "remote_therapeutic_monitoring"
    PRINCIPAL_CARE_MGMT = "principal_care_mgmt"
    OTHER_EM = "other_em"
    TELEHEALTH_OUD = "telehealth_oud"
    SUBSTANCE_ABUSE_TREATMENT = "substance_abuse_treatment"
    ACUPUNCTURE = "acupuncture"
    PHYSICAL_THERAPY = "physical_therapy"
    LACTATION_CONSULTING = "lactation_consulting"
    SLEEP_STUDY = "sleep_study"
    CMS_TELEHEALTH_CODES = "cms_telehealth_codes"
    CMS_TELEHEALTH_AUDIO_CODES = "cms_telehealth_audio_codes"

    def visit(
        self,
        new_patient_video_appt: typing.Callable[[], T_Result],
        new_patient_prev_video_appt: typing.Callable[[], T_Result],
        new_patient_office_appt: typing.Callable[[], T_Result],
        established_patient_video_appt: typing.Callable[[], T_Result],
        established_patient_prev_video_appt: typing.Callable[[], T_Result],
        established_patient_office_appt: typing.Callable[[], T_Result],
        patient_portal_with_qualified_physician: typing.Callable[[], T_Result],
        patient_portal_with_non_qualified_physician: typing.Callable[[], T_Result],
        group_therapy: typing.Callable[[], T_Result],
        phone_appt: typing.Callable[[], T_Result],
        annual_wellness_visit: typing.Callable[[], T_Result],
        remote_patient_monitoring: typing.Callable[[], T_Result],
        diagnostic: typing.Callable[[], T_Result],
        cardiac_monitoring: typing.Callable[[], T_Result],
        cardiac_codes: typing.Callable[[], T_Result],
        psychotherapy: typing.Callable[[], T_Result],
        phone_therapy: typing.Callable[[], T_Result],
        alcohol_abuse: typing.Callable[[], T_Result],
        smoking_cessation: typing.Callable[[], T_Result],
        speech_therapy: typing.Callable[[], T_Result],
        home_visit: typing.Callable[[], T_Result],
        medical_nutrition_therapy: typing.Callable[[], T_Result],
        nutritional_counseling: typing.Callable[[], T_Result],
        dietitian_visit: typing.Callable[[], T_Result],
        preventative_medicine_counseling: typing.Callable[[], T_Result],
        chronic_care: typing.Callable[[], T_Result],
        advance_care: typing.Callable[[], T_Result],
        collaborative_care_management: typing.Callable[[], T_Result],
        abortion_care: typing.Callable[[], T_Result],
        abortion_drugs: typing.Callable[[], T_Result],
        remote_therapeutic_monitoring: typing.Callable[[], T_Result],
        principal_care_mgmt: typing.Callable[[], T_Result],
        other_em: typing.Callable[[], T_Result],
        telehealth_oud: typing.Callable[[], T_Result],
        substance_abuse_treatment: typing.Callable[[], T_Result],
        acupuncture: typing.Callable[[], T_Result],
        physical_therapy: typing.Callable[[], T_Result],
        lactation_consulting: typing.Callable[[], T_Result],
        sleep_study: typing.Callable[[], T_Result],
        cms_telehealth_codes: typing.Callable[[], T_Result],
        cms_telehealth_audio_codes: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is ServiceType.NEW_PATIENT_VIDEO_APPT:
            return new_patient_video_appt()
        if self is ServiceType.NEW_PATIENT_PREV_VIDEO_APPT:
            return new_patient_prev_video_appt()
        if self is ServiceType.NEW_PATIENT_OFFICE_APPT:
            return new_patient_office_appt()
        if self is ServiceType.ESTABLISHED_PATIENT_VIDEO_APPT:
            return established_patient_video_appt()
        if self is ServiceType.ESTABLISHED_PATIENT_PREV_VIDEO_APPT:
            return established_patient_prev_video_appt()
        if self is ServiceType.ESTABLISHED_PATIENT_OFFICE_APPT:
            return established_patient_office_appt()
        if self is ServiceType.PATIENT_PORTAL_WITH_QUALIFIED_PHYSICIAN:
            return patient_portal_with_qualified_physician()
        if self is ServiceType.PATIENT_PORTAL_WITH_NON_QUALIFIED_PHYSICIAN:
            return patient_portal_with_non_qualified_physician()
        if self is ServiceType.GROUP_THERAPY:
            return group_therapy()
        if self is ServiceType.PHONE_APPT:
            return phone_appt()
        if self is ServiceType.ANNUAL_WELLNESS_VISIT:
            return annual_wellness_visit()
        if self is ServiceType.REMOTE_PATIENT_MONITORING:
            return remote_patient_monitoring()
        if self is ServiceType.DIAGNOSTIC:
            return diagnostic()
        if self is ServiceType.CARDIAC_MONITORING:
            return cardiac_monitoring()
        if self is ServiceType.CARDIAC_CODES:
            return cardiac_codes()
        if self is ServiceType.PSYCHOTHERAPY:
            return psychotherapy()
        if self is ServiceType.PHONE_THERAPY:
            return phone_therapy()
        if self is ServiceType.ALCOHOL_ABUSE:
            return alcohol_abuse()
        if self is ServiceType.SMOKING_CESSATION:
            return smoking_cessation()
        if self is ServiceType.SPEECH_THERAPY:
            return speech_therapy()
        if self is ServiceType.HOME_VISIT:
            return home_visit()
        if self is ServiceType.MEDICAL_NUTRITION_THERAPY:
            return medical_nutrition_therapy()
        if self is ServiceType.NUTRITIONAL_COUNSELING:
            return nutritional_counseling()
        if self is ServiceType.DIETITIAN_VISIT:
            return dietitian_visit()
        if self is ServiceType.PREVENTATIVE_MEDICINE_COUNSELING:
            return preventative_medicine_counseling()
        if self is ServiceType.CHRONIC_CARE:
            return chronic_care()
        if self is ServiceType.ADVANCE_CARE:
            return advance_care()
        if self is ServiceType.COLLABORATIVE_CARE_MANAGEMENT:
            return collaborative_care_management()
        if self is ServiceType.ABORTION_CARE:
            return abortion_care()
        if self is ServiceType.ABORTION_DRUGS:
            return abortion_drugs()
        if self is ServiceType.REMOTE_THERAPEUTIC_MONITORING:
            return remote_therapeutic_monitoring()
        if self is ServiceType.PRINCIPAL_CARE_MGMT:
            return principal_care_mgmt()
        if self is ServiceType.OTHER_EM:
            return other_em()
        if self is ServiceType.TELEHEALTH_OUD:
            return telehealth_oud()
        if self is ServiceType.SUBSTANCE_ABUSE_TREATMENT:
            return substance_abuse_treatment()
        if self is ServiceType.ACUPUNCTURE:
            return acupuncture()
        if self is ServiceType.PHYSICAL_THERAPY:
            return physical_therapy()
        if self is ServiceType.LACTATION_CONSULTING:
            return lactation_consulting()
        if self is ServiceType.SLEEP_STUDY:
            return sleep_study()
        if self is ServiceType.CMS_TELEHEALTH_CODES:
            return cms_telehealth_codes()
        if self is ServiceType.CMS_TELEHEALTH_AUDIO_CODES:
            return cms_telehealth_audio_codes()
