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

import typing

from ..core import enum

T_Result = typing.TypeVar("T_Result")


class AddonComponentName(enum.StrEnum):
    ARGOCD = "ARGOCD"
    ARGO_ROLLOUT = "ARGO_ROLLOUT"
    ARGO_WORKFLOW = "ARGO_WORKFLOW"
    TFY_AGENT = "TFY_AGENT"
    ISTIO_BASE = "ISTIO_BASE"
    ISTIO_DISCOVERY = "ISTIO_DISCOVERY"
    TFY_ISTIO_INGRESS = "TFY_ISTIO_INGRESS"
    AWS_LOAD_BALANCER_CONTROLLER = "AWS_LOAD_BALANCER_CONTROLLER"
    CERT_MANAGER = "CERT_MANAGER"
    KARPENTER = "KARPENTER"
    KARPENTER_CONFIG = "KARPENTER_CONFIG"
    PROMETHEUS = "PROMETHEUS"
    METRICS_SERVER = "METRICS_SERVER"
    KUBECOST = "KUBECOST"
    KEDA = "KEDA"
    AWS_EFS_CSI_DRIVER = "AWS_EFS_CSI_DRIVER"
    AWS_EBS_CSI_DRIVER = "AWS_EBS_CSI_DRIVER"
    TFY_GPU_OPERATOR = "TFY_GPU_OPERATOR"
    TFY_INFERENTIA_OPERATOR = "TFY_INFERENTIA_OPERATOR"
    ELASTI = "ELASTI"
    TFY_WORKFLOW_PROPELLER = "TFY_WORKFLOW_PROPELLER"
    GRAFANA = "GRAFANA"
    TRUEFOUNDRY = "TRUEFOUNDRY"
    TFY_PROMETHEUS_CONFIG = "TFY_PROMETHEUS_CONFIG"
    SPARK_OPERATOR = "SPARK_OPERATOR"
    TFY_LOGS = "TFY_LOGS"

    def visit(
        self,
        argocd: typing.Callable[[], T_Result],
        argo_rollout: typing.Callable[[], T_Result],
        argo_workflow: typing.Callable[[], T_Result],
        tfy_agent: typing.Callable[[], T_Result],
        istio_base: typing.Callable[[], T_Result],
        istio_discovery: typing.Callable[[], T_Result],
        tfy_istio_ingress: typing.Callable[[], T_Result],
        aws_load_balancer_controller: typing.Callable[[], T_Result],
        cert_manager: typing.Callable[[], T_Result],
        karpenter: typing.Callable[[], T_Result],
        karpenter_config: typing.Callable[[], T_Result],
        prometheus: typing.Callable[[], T_Result],
        metrics_server: typing.Callable[[], T_Result],
        kubecost: typing.Callable[[], T_Result],
        keda: typing.Callable[[], T_Result],
        aws_efs_csi_driver: typing.Callable[[], T_Result],
        aws_ebs_csi_driver: typing.Callable[[], T_Result],
        tfy_gpu_operator: typing.Callable[[], T_Result],
        tfy_inferentia_operator: typing.Callable[[], T_Result],
        elasti: typing.Callable[[], T_Result],
        tfy_workflow_propeller: typing.Callable[[], T_Result],
        grafana: typing.Callable[[], T_Result],
        truefoundry: typing.Callable[[], T_Result],
        tfy_prometheus_config: typing.Callable[[], T_Result],
        spark_operator: typing.Callable[[], T_Result],
        tfy_logs: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is AddonComponentName.ARGOCD:
            return argocd()
        if self is AddonComponentName.ARGO_ROLLOUT:
            return argo_rollout()
        if self is AddonComponentName.ARGO_WORKFLOW:
            return argo_workflow()
        if self is AddonComponentName.TFY_AGENT:
            return tfy_agent()
        if self is AddonComponentName.ISTIO_BASE:
            return istio_base()
        if self is AddonComponentName.ISTIO_DISCOVERY:
            return istio_discovery()
        if self is AddonComponentName.TFY_ISTIO_INGRESS:
            return tfy_istio_ingress()
        if self is AddonComponentName.AWS_LOAD_BALANCER_CONTROLLER:
            return aws_load_balancer_controller()
        if self is AddonComponentName.CERT_MANAGER:
            return cert_manager()
        if self is AddonComponentName.KARPENTER:
            return karpenter()
        if self is AddonComponentName.KARPENTER_CONFIG:
            return karpenter_config()
        if self is AddonComponentName.PROMETHEUS:
            return prometheus()
        if self is AddonComponentName.METRICS_SERVER:
            return metrics_server()
        if self is AddonComponentName.KUBECOST:
            return kubecost()
        if self is AddonComponentName.KEDA:
            return keda()
        if self is AddonComponentName.AWS_EFS_CSI_DRIVER:
            return aws_efs_csi_driver()
        if self is AddonComponentName.AWS_EBS_CSI_DRIVER:
            return aws_ebs_csi_driver()
        if self is AddonComponentName.TFY_GPU_OPERATOR:
            return tfy_gpu_operator()
        if self is AddonComponentName.TFY_INFERENTIA_OPERATOR:
            return tfy_inferentia_operator()
        if self is AddonComponentName.ELASTI:
            return elasti()
        if self is AddonComponentName.TFY_WORKFLOW_PROPELLER:
            return tfy_workflow_propeller()
        if self is AddonComponentName.GRAFANA:
            return grafana()
        if self is AddonComponentName.TRUEFOUNDRY:
            return truefoundry()
        if self is AddonComponentName.TFY_PROMETHEUS_CONFIG:
            return tfy_prometheus_config()
        if self is AddonComponentName.SPARK_OPERATOR:
            return spark_operator()
        if self is AddonComponentName.TFY_LOGS:
            return tfy_logs()
