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

import enum
import typing

T_Result = typing.TypeVar("T_Result")


class BillingMonth(str, enum.Enum):
    PARTIAL = "partial"
    JANUARY = "january"
    FEBRUARY = "february"
    MARCH = "march"
    APRIL = "april"
    MAY = "may"
    JUNE = "june"
    JULY = "july"
    AUGUST = "august"
    SEPTEMBER = "september"
    OCTOBER = "october"
    NOVEMBER = "november"
    DECEMBER = "december"
    _UNKNOWN = "__BILLINGMONTH_UNKNOWN__"
    """
    This member is used for forward compatibility. If the value is not recognized by the enum, it will be stored here, and the raw value is accessible through `.value`.
    """

    @classmethod
    def _missing_(cls, value: typing.Any) -> "BillingMonth":
        unknown = cls._UNKNOWN
        unknown._value_ = value
        return unknown

    def visit(
        self,
        partial: typing.Callable[[], T_Result],
        january: typing.Callable[[], T_Result],
        february: typing.Callable[[], T_Result],
        march: typing.Callable[[], T_Result],
        april: typing.Callable[[], T_Result],
        may: typing.Callable[[], T_Result],
        june: typing.Callable[[], T_Result],
        july: typing.Callable[[], T_Result],
        august: typing.Callable[[], T_Result],
        september: typing.Callable[[], T_Result],
        october: typing.Callable[[], T_Result],
        november: typing.Callable[[], T_Result],
        december: typing.Callable[[], T_Result],
        _unknown_member: typing.Callable[[str], T_Result],
    ) -> T_Result:
        if self is BillingMonth.PARTIAL:
            return partial()
        if self is BillingMonth.JANUARY:
            return january()
        if self is BillingMonth.FEBRUARY:
            return february()
        if self is BillingMonth.MARCH:
            return march()
        if self is BillingMonth.APRIL:
            return april()
        if self is BillingMonth.MAY:
            return may()
        if self is BillingMonth.JUNE:
            return june()
        if self is BillingMonth.JULY:
            return july()
        if self is BillingMonth.AUGUST:
            return august()
        if self is BillingMonth.SEPTEMBER:
            return september()
        if self is BillingMonth.OCTOBER:
            return october()
        if self is BillingMonth.NOVEMBER:
            return november()
        if self is BillingMonth.DECEMBER:
            return december()
        return _unknown_member(self._value_)
