# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import warnings
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
from .. import _utilities
from . import outputs

__all__ = [
    'BudgetResourceGroupFilter',
    'BudgetResourceGroupFilterDimension',
    'BudgetResourceGroupFilterNot',
    'BudgetResourceGroupFilterNotDimension',
    'BudgetResourceGroupFilterNotTag',
    'BudgetResourceGroupFilterTag',
    'BudgetResourceGroupNotification',
    'BudgetResourceGroupTimePeriod',
    'BudgetSubscriptionFilter',
    'BudgetSubscriptionFilterDimension',
    'BudgetSubscriptionFilterNot',
    'BudgetSubscriptionFilterNotDimension',
    'BudgetSubscriptionFilterNotTag',
    'BudgetSubscriptionFilterTag',
    'BudgetSubscriptionNotification',
    'BudgetSubscriptionTimePeriod',
]

@pulumi.output_type
class BudgetResourceGroupFilter(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "not":
            suggest = "not_"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetResourceGroupFilter. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetResourceGroupFilter.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetResourceGroupFilter.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 dimensions: Optional[Sequence['outputs.BudgetResourceGroupFilterDimension']] = None,
                 not_: Optional['outputs.BudgetResourceGroupFilterNot'] = None,
                 tags: Optional[Sequence['outputs.BudgetResourceGroupFilterTag']] = None):
        """
        :param Sequence['BudgetResourceGroupFilterDimensionArgs'] dimensions: One or more `dimension` blocks as defined below to filter the budget on.
        :param 'BudgetResourceGroupFilterNotArgs' not_: A `not` block as defined below to filter the budget on.
        :param Sequence['BudgetResourceGroupFilterTagArgs'] tags: One or more `tag` blocks as defined below to filter the budget on.
        """
        if dimensions is not None:
            pulumi.set(__self__, "dimensions", dimensions)
        if not_ is not None:
            pulumi.set(__self__, "not_", not_)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def dimensions(self) -> Optional[Sequence['outputs.BudgetResourceGroupFilterDimension']]:
        """
        One or more `dimension` blocks as defined below to filter the budget on.
        """
        return pulumi.get(self, "dimensions")

    @property
    @pulumi.getter(name="not")
    def not_(self) -> Optional['outputs.BudgetResourceGroupFilterNot']:
        """
        A `not` block as defined below to filter the budget on.
        """
        return pulumi.get(self, "not_")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Sequence['outputs.BudgetResourceGroupFilterTag']]:
        """
        One or more `tag` blocks as defined below to filter the budget on.
        """
        return pulumi.get(self, "tags")


@pulumi.output_type
class BudgetResourceGroupFilterDimension(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        :param Sequence[str] values: Specifies a list of values for the column.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the column.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetResourceGroupFilterNot(dict):
    def __init__(__self__, *,
                 dimension: Optional['outputs.BudgetResourceGroupFilterNotDimension'] = None,
                 tag: Optional['outputs.BudgetResourceGroupFilterNotTag'] = None):
        """
        :param 'BudgetResourceGroupFilterNotDimensionArgs' dimension: One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
        :param 'BudgetResourceGroupFilterNotTagArgs' tag: One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
        """
        if dimension is not None:
            pulumi.set(__self__, "dimension", dimension)
        if tag is not None:
            pulumi.set(__self__, "tag", tag)

    @property
    @pulumi.getter
    def dimension(self) -> Optional['outputs.BudgetResourceGroupFilterNotDimension']:
        """
        One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
        """
        return pulumi.get(self, "dimension")

    @property
    @pulumi.getter
    def tag(self) -> Optional['outputs.BudgetResourceGroupFilterNotTag']:
        """
        One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
        """
        return pulumi.get(self, "tag")


@pulumi.output_type
class BudgetResourceGroupFilterNotDimension(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        :param Sequence[str] values: Specifies a list of values for the column.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the column.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetResourceGroupFilterNotTag(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the tag to use for the filter.
        :param Sequence[str] values: Specifies a list of values for the tag.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the tag to use for the filter.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the tag.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetResourceGroupFilterTag(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the tag to use for the filter.
        :param Sequence[str] values: Specifies a list of values for the tag.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the tag to use for the filter.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the tag.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetResourceGroupNotification(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "contactEmails":
            suggest = "contact_emails"
        elif key == "contactGroups":
            suggest = "contact_groups"
        elif key == "contactRoles":
            suggest = "contact_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetResourceGroupNotification. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetResourceGroupNotification.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetResourceGroupNotification.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 operator: str,
                 threshold: int,
                 contact_emails: Optional[Sequence[str]] = None,
                 contact_groups: Optional[Sequence[str]] = None,
                 contact_roles: Optional[Sequence[str]] = None,
                 enabled: Optional[bool] = None):
        """
        :param str operator: The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
        :param int threshold: Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000.
        :param Sequence[str] contact_emails: Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
        :param Sequence[str] contact_groups: Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
        :param Sequence[str] contact_roles: Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
        :param bool enabled: Should the notification be enabled?
        """
        pulumi.set(__self__, "operator", operator)
        pulumi.set(__self__, "threshold", threshold)
        if contact_emails is not None:
            pulumi.set(__self__, "contact_emails", contact_emails)
        if contact_groups is not None:
            pulumi.set(__self__, "contact_groups", contact_groups)
        if contact_roles is not None:
            pulumi.set(__self__, "contact_roles", contact_roles)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def operator(self) -> str:
        """
        The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
        """
        return pulumi.get(self, "operator")

    @property
    @pulumi.getter
    def threshold(self) -> int:
        """
        Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000.
        """
        return pulumi.get(self, "threshold")

    @property
    @pulumi.getter(name="contactEmails")
    def contact_emails(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_emails")

    @property
    @pulumi.getter(name="contactGroups")
    def contact_groups(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_groups")

    @property
    @pulumi.getter(name="contactRoles")
    def contact_roles(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_roles")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Should the notification be enabled?
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class BudgetResourceGroupTimePeriod(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "startDate":
            suggest = "start_date"
        elif key == "endDate":
            suggest = "end_date"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetResourceGroupTimePeriod. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetResourceGroupTimePeriod.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetResourceGroupTimePeriod.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 start_date: str,
                 end_date: Optional[str] = None):
        """
        :param str start_date: The start date for the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. Changing this forces a new Resource Group Consumption Budget to be created.
        :param str end_date: The end date for the budget. If not set this will be 10 years after the start date.
        """
        pulumi.set(__self__, "start_date", start_date)
        if end_date is not None:
            pulumi.set(__self__, "end_date", end_date)

    @property
    @pulumi.getter(name="startDate")
    def start_date(self) -> str:
        """
        The start date for the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. Changing this forces a new Resource Group Consumption Budget to be created.
        """
        return pulumi.get(self, "start_date")

    @property
    @pulumi.getter(name="endDate")
    def end_date(self) -> Optional[str]:
        """
        The end date for the budget. If not set this will be 10 years after the start date.
        """
        return pulumi.get(self, "end_date")


@pulumi.output_type
class BudgetSubscriptionFilter(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "not":
            suggest = "not_"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetSubscriptionFilter. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetSubscriptionFilter.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetSubscriptionFilter.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 dimensions: Optional[Sequence['outputs.BudgetSubscriptionFilterDimension']] = None,
                 not_: Optional['outputs.BudgetSubscriptionFilterNot'] = None,
                 tags: Optional[Sequence['outputs.BudgetSubscriptionFilterTag']] = None):
        """
        :param Sequence['BudgetSubscriptionFilterDimensionArgs'] dimensions: One or more `dimension` blocks as defined below to filter the budget on.
        :param 'BudgetSubscriptionFilterNotArgs' not_: A `not` block as defined below to filter the budget on.
        :param Sequence['BudgetSubscriptionFilterTagArgs'] tags: One or more `tag` blocks as defined below to filter the budget on.
        """
        if dimensions is not None:
            pulumi.set(__self__, "dimensions", dimensions)
        if not_ is not None:
            pulumi.set(__self__, "not_", not_)
        if tags is not None:
            pulumi.set(__self__, "tags", tags)

    @property
    @pulumi.getter
    def dimensions(self) -> Optional[Sequence['outputs.BudgetSubscriptionFilterDimension']]:
        """
        One or more `dimension` blocks as defined below to filter the budget on.
        """
        return pulumi.get(self, "dimensions")

    @property
    @pulumi.getter(name="not")
    def not_(self) -> Optional['outputs.BudgetSubscriptionFilterNot']:
        """
        A `not` block as defined below to filter the budget on.
        """
        return pulumi.get(self, "not_")

    @property
    @pulumi.getter
    def tags(self) -> Optional[Sequence['outputs.BudgetSubscriptionFilterTag']]:
        """
        One or more `tag` blocks as defined below to filter the budget on.
        """
        return pulumi.get(self, "tags")


@pulumi.output_type
class BudgetSubscriptionFilterDimension(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        :param Sequence[str] values: Specifies a list of values for the column.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the column.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetSubscriptionFilterNot(dict):
    def __init__(__self__, *,
                 dimension: Optional['outputs.BudgetSubscriptionFilterNotDimension'] = None,
                 tag: Optional['outputs.BudgetSubscriptionFilterNotTag'] = None):
        """
        :param 'BudgetSubscriptionFilterNotDimensionArgs' dimension: One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
        :param 'BudgetSubscriptionFilterNotTagArgs' tag: One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
        """
        if dimension is not None:
            pulumi.set(__self__, "dimension", dimension)
        if tag is not None:
            pulumi.set(__self__, "tag", tag)

    @property
    @pulumi.getter
    def dimension(self) -> Optional['outputs.BudgetSubscriptionFilterNotDimension']:
        """
        One `dimension` block as defined below to filter the budget on. Conflicts with `tag`.
        """
        return pulumi.get(self, "dimension")

    @property
    @pulumi.getter
    def tag(self) -> Optional['outputs.BudgetSubscriptionFilterNotTag']:
        """
        One `tag` block as defined below to filter the budget on. Conflicts with `dimension`.
        """
        return pulumi.get(self, "tag")


@pulumi.output_type
class BudgetSubscriptionFilterNotDimension(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        :param Sequence[str] values: Specifies a list of values for the column.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the column to use for the filter. The allowed values are `ChargeType`, `Frequency`, `InvoiceId`, `Meter`, `MeterCategory`, `MeterSubCategory`, `PartNumber`, `PricingModel`, `Product`, `ProductOrderId`, `ProductOrderName`, `PublisherType`, `ReservationId`, `ReservationName`, `ResourceGroupName`, `ResourceGuid`, `ResourceId`, `ResourceLocation`, `ResourceType`, `ServiceFamily`, `ServiceName`, `UnitOfMeasure`.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the column.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetSubscriptionFilterNotTag(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the tag to use for the filter.
        :param Sequence[str] values: Specifies a list of values for the tag.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the tag to use for the filter.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the tag.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetSubscriptionFilterTag(dict):
    def __init__(__self__, *,
                 name: str,
                 values: Sequence[str],
                 operator: Optional[str] = None):
        """
        :param str name: The name of the tag to use for the filter.
        :param Sequence[str] values: Specifies a list of values for the tag.
        :param str operator: The operator to use for comparison. The allowed values are `In`.
        """
        pulumi.set(__self__, "name", name)
        pulumi.set(__self__, "values", values)
        if operator is not None:
            pulumi.set(__self__, "operator", operator)

    @property
    @pulumi.getter
    def name(self) -> str:
        """
        The name of the tag to use for the filter.
        """
        return pulumi.get(self, "name")

    @property
    @pulumi.getter
    def values(self) -> Sequence[str]:
        """
        Specifies a list of values for the tag.
        """
        return pulumi.get(self, "values")

    @property
    @pulumi.getter
    def operator(self) -> Optional[str]:
        """
        The operator to use for comparison. The allowed values are `In`.
        """
        return pulumi.get(self, "operator")


@pulumi.output_type
class BudgetSubscriptionNotification(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "contactEmails":
            suggest = "contact_emails"
        elif key == "contactGroups":
            suggest = "contact_groups"
        elif key == "contactRoles":
            suggest = "contact_roles"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetSubscriptionNotification. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetSubscriptionNotification.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetSubscriptionNotification.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 operator: str,
                 threshold: int,
                 contact_emails: Optional[Sequence[str]] = None,
                 contact_groups: Optional[Sequence[str]] = None,
                 contact_roles: Optional[Sequence[str]] = None,
                 enabled: Optional[bool] = None):
        """
        :param str operator: The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
        :param int threshold: Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000.
        :param Sequence[str] contact_emails: Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
        :param Sequence[str] contact_groups: Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
        :param Sequence[str] contact_roles: Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
        :param bool enabled: Should the notification be enabled?
        """
        pulumi.set(__self__, "operator", operator)
        pulumi.set(__self__, "threshold", threshold)
        if contact_emails is not None:
            pulumi.set(__self__, "contact_emails", contact_emails)
        if contact_groups is not None:
            pulumi.set(__self__, "contact_groups", contact_groups)
        if contact_roles is not None:
            pulumi.set(__self__, "contact_roles", contact_roles)
        if enabled is not None:
            pulumi.set(__self__, "enabled", enabled)

    @property
    @pulumi.getter
    def operator(self) -> str:
        """
        The comparison operator for the notification. Must be one of `EqualTo`, `GreaterThan`, or `GreaterThanOrEqualTo`.
        """
        return pulumi.get(self, "operator")

    @property
    @pulumi.getter
    def threshold(self) -> int:
        """
        Threshold value associated with a notification. Notification is sent when the cost exceeded the threshold. It is always percent and has to be between 0 and 1000.
        """
        return pulumi.get(self, "threshold")

    @property
    @pulumi.getter(name="contactEmails")
    def contact_emails(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of email addresses to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_emails")

    @property
    @pulumi.getter(name="contactGroups")
    def contact_groups(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of Action Group IDs to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_groups")

    @property
    @pulumi.getter(name="contactRoles")
    def contact_roles(self) -> Optional[Sequence[str]]:
        """
        Specifies a list of contact roles to send the budget notification to when the threshold is exceeded.
        """
        return pulumi.get(self, "contact_roles")

    @property
    @pulumi.getter
    def enabled(self) -> Optional[bool]:
        """
        Should the notification be enabled?
        """
        return pulumi.get(self, "enabled")


@pulumi.output_type
class BudgetSubscriptionTimePeriod(dict):
    @staticmethod
    def __key_warning(key: str):
        suggest = None
        if key == "startDate":
            suggest = "start_date"
        elif key == "endDate":
            suggest = "end_date"

        if suggest:
            pulumi.log.warn(f"Key '{key}' not found in BudgetSubscriptionTimePeriod. Access the value via the '{suggest}' property getter instead.")

    def __getitem__(self, key: str) -> Any:
        BudgetSubscriptionTimePeriod.__key_warning(key)
        return super().__getitem__(key)

    def get(self, key: str, default = None) -> Any:
        BudgetSubscriptionTimePeriod.__key_warning(key)
        return super().get(key, default)

    def __init__(__self__, *,
                 start_date: str,
                 end_date: Optional[str] = None):
        """
        :param str start_date: The start date for the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. Changing this forces a new Subscription Consumption Budget to be created.
        :param str end_date: The end date for the budget. If not set this will be 10 years after the start date.
        """
        pulumi.set(__self__, "start_date", start_date)
        if end_date is not None:
            pulumi.set(__self__, "end_date", end_date)

    @property
    @pulumi.getter(name="startDate")
    def start_date(self) -> str:
        """
        The start date for the budget. The start date must be first of the month and should be less than the end date. Budget start date must be on or after June 1, 2017. Future start date should not be more than twelve months. Past start date should be selected within the timegrain period. Changing this forces a new Subscription Consumption Budget to be created.
        """
        return pulumi.get(self, "start_date")

    @property
    @pulumi.getter(name="endDate")
    def end_date(self) -> Optional[str]:
        """
        The end date for the budget. If not set this will be 10 years after the start date.
        """
        return pulumi.get(self, "end_date")


