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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class OrderLowLevelStatus(str, enum.Enum):
    """
    ℹ️ This enum is non-exhaustive.
    """

    ORDERED = "ordered"
    REQUISITION_CREATED = "requisition_created"
    REQUISITION_BYPASSED = "requisition_bypassed"
    TRANSIT_CUSTOMER = "transit_customer"
    OUT_FOR_DELIVERY = "out_for_delivery"
    WITH_CUSTOMER = "with_customer"
    TRANSIT_LAB = "transit_lab"
    DELIVERED_TO_LAB = "delivered_to_lab"
    COMPLETED = "completed"
    FAILURE_TO_DELIVER_TO_LAB = "failure_to_deliver_to_lab"
    FAILURE_TO_DELIVER_TO_CUSTOMER = "failure_to_deliver_to_customer"
    PROBLEM_IN_TRANSIT_LAB = "problem_in_transit_lab"
    PROBLEM_IN_TRANSIT_CUSTOMER = "problem_in_transit_customer"
    SAMPLE_ERROR = "sample_error"
    APPOINTMENT_SCHEDULED = "appointment_scheduled"
    APPOINTMENT_CANCELLED = "appointment_cancelled"
    APPOINTMENT_PENDING = "appointment_pending"
    DRAW_COMPLETED = "draw_completed"
    CANCELLED = "cancelled"
    LOST = "lost"
    DO_NOT_PROCESS = "do_not_process"
    PARTIAL_RESULTS = "partial_results"
    AWAITING_REGISTRATION = "awaiting_registration"
    REGISTERED = "registered"

    def visit(
        self,
        ordered: typing.Callable[[], T_Result],
        requisition_created: typing.Callable[[], T_Result],
        requisition_bypassed: typing.Callable[[], T_Result],
        transit_customer: typing.Callable[[], T_Result],
        out_for_delivery: typing.Callable[[], T_Result],
        with_customer: typing.Callable[[], T_Result],
        transit_lab: typing.Callable[[], T_Result],
        delivered_to_lab: typing.Callable[[], T_Result],
        completed: typing.Callable[[], T_Result],
        failure_to_deliver_to_lab: typing.Callable[[], T_Result],
        failure_to_deliver_to_customer: typing.Callable[[], T_Result],
        problem_in_transit_lab: typing.Callable[[], T_Result],
        problem_in_transit_customer: typing.Callable[[], T_Result],
        sample_error: typing.Callable[[], T_Result],
        appointment_scheduled: typing.Callable[[], T_Result],
        appointment_cancelled: typing.Callable[[], T_Result],
        appointment_pending: typing.Callable[[], T_Result],
        draw_completed: typing.Callable[[], T_Result],
        cancelled: typing.Callable[[], T_Result],
        lost: typing.Callable[[], T_Result],
        do_not_process: typing.Callable[[], T_Result],
        partial_results: typing.Callable[[], T_Result],
        awaiting_registration: typing.Callable[[], T_Result],
        registered: typing.Callable[[], T_Result],
    ) -> T_Result:
        if self is OrderLowLevelStatus.ORDERED:
            return ordered()
        if self is OrderLowLevelStatus.REQUISITION_CREATED:
            return requisition_created()
        if self is OrderLowLevelStatus.REQUISITION_BYPASSED:
            return requisition_bypassed()
        if self is OrderLowLevelStatus.TRANSIT_CUSTOMER:
            return transit_customer()
        if self is OrderLowLevelStatus.OUT_FOR_DELIVERY:
            return out_for_delivery()
        if self is OrderLowLevelStatus.WITH_CUSTOMER:
            return with_customer()
        if self is OrderLowLevelStatus.TRANSIT_LAB:
            return transit_lab()
        if self is OrderLowLevelStatus.DELIVERED_TO_LAB:
            return delivered_to_lab()
        if self is OrderLowLevelStatus.COMPLETED:
            return completed()
        if self is OrderLowLevelStatus.FAILURE_TO_DELIVER_TO_LAB:
            return failure_to_deliver_to_lab()
        if self is OrderLowLevelStatus.FAILURE_TO_DELIVER_TO_CUSTOMER:
            return failure_to_deliver_to_customer()
        if self is OrderLowLevelStatus.PROBLEM_IN_TRANSIT_LAB:
            return problem_in_transit_lab()
        if self is OrderLowLevelStatus.PROBLEM_IN_TRANSIT_CUSTOMER:
            return problem_in_transit_customer()
        if self is OrderLowLevelStatus.SAMPLE_ERROR:
            return sample_error()
        if self is OrderLowLevelStatus.APPOINTMENT_SCHEDULED:
            return appointment_scheduled()
        if self is OrderLowLevelStatus.APPOINTMENT_CANCELLED:
            return appointment_cancelled()
        if self is OrderLowLevelStatus.APPOINTMENT_PENDING:
            return appointment_pending()
        if self is OrderLowLevelStatus.DRAW_COMPLETED:
            return draw_completed()
        if self is OrderLowLevelStatus.CANCELLED:
            return cancelled()
        if self is OrderLowLevelStatus.LOST:
            return lost()
        if self is OrderLowLevelStatus.DO_NOT_PROCESS:
            return do_not_process()
        if self is OrderLowLevelStatus.PARTIAL_RESULTS:
            return partial_results()
        if self is OrderLowLevelStatus.AWAITING_REGISTRATION:
            return awaiting_registration()
        if self is OrderLowLevelStatus.REGISTERED:
            return registered()
