# coding: utf-8

"""
    Zuora API Reference

    REST API reference for the Zuora Billing, Payments, and Central Platform! Check out the [REST API Overview](https://www.zuora.com/developer/api-references/api/overview/).

    The version of the OpenAPI document: 2024-05-20
    Contact: docs@zuora.com
    Generated by OpenAPI Generator (https://openapi-generator.tech)

    Do not edit the class manually.
"""  # noqa: E501


from __future__ import annotations
import json
from enum import Enum
from typing_extensions import Self


class BillCycleType(str, Enum):
    """
    Specifies how Zuora determines the day that each billing period begins on.    * `DefaultFromCustomer` - Each billing period begins on the bill cycle day of the account that owns the subscription.   * `SpecificDayofMonth` - Use the `billCycleDay` field to specify the day of the month that each billing period begins on.   * `SubscriptionStartDay` - Each billing period begins on the same day of the month as the start date of the subscription.   * `ChargeTriggerDay` - Each billing period begins on the same day of the month as the date when the charge becomes active.   * `SpecificDayofWeek` - Use the `weeklyBillCycleDay` field to specify the day of the week that each billing period begins on.   - If you set this field to `SpecificDayofMonth`, you must also specify the `billCycleDay` field.  - If you set this field to to `SpecificDayofWeek`, you must also specify the `weeklyBillCycleDay` field. 
    """

    """
    allowed enum values
    """
    DEFAULTFROMCUSTOMER = 'DefaultFromCustomer'
    SPECIFICDAYOFMONTH = 'SpecificDayofMonth'
    SUBSCRIPTIONSTARTDAY = 'SubscriptionStartDay'
    CHARGETRIGGERDAY = 'ChargeTriggerDay'
    SPECIFICDAYOFWEEK = 'SpecificDayofWeek'
    TERMSTARTDAY = 'TermStartDay'
    TERMENDDAY = 'TermEndDay'

    @classmethod
    def from_json(cls, json_str: str) -> Self:
        """Create an instance of BillCycleType from a JSON string"""
        return cls(json.loads(json_str))


