# 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 builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities
from . import outputs

__all__ = [
    'GetNgwResult',
    'AwaitableGetNgwResult',
    'get_ngw',
    'get_ngw_output',
]

@pulumi.output_type
class GetNgwResult:
    """
    A collection of values returned by getNgw.
    """
    def __init__(__self__, billing_type=None, business_status=None, created_time=None, deleted_time=None, description=None, direct_mode=None, dnat_entry_ids=None, eip_addresses=None, expired_time=None, id=None, lock_reason=None, nat_gateway_id=None, nat_gateway_name=None, nat_ip_addresses=None, network_interface_id=None, network_type=None, overdue_time=None, period=None, period_unit=None, project_name=None, smart_schedule_enabled=None, smart_schedule_rule=None, snat_entry_ids=None, spec=None, status=None, subnet_id=None, tags=None, updated_time=None, vpc_id=None, zone_id=None):
        if billing_type and not isinstance(billing_type, int):
            raise TypeError("Expected argument 'billing_type' to be a int")
        pulumi.set(__self__, "billing_type", billing_type)
        if business_status and not isinstance(business_status, str):
            raise TypeError("Expected argument 'business_status' to be a str")
        pulumi.set(__self__, "business_status", business_status)
        if created_time and not isinstance(created_time, str):
            raise TypeError("Expected argument 'created_time' to be a str")
        pulumi.set(__self__, "created_time", created_time)
        if deleted_time and not isinstance(deleted_time, str):
            raise TypeError("Expected argument 'deleted_time' to be a str")
        pulumi.set(__self__, "deleted_time", deleted_time)
        if description and not isinstance(description, str):
            raise TypeError("Expected argument 'description' to be a str")
        pulumi.set(__self__, "description", description)
        if direct_mode and not isinstance(direct_mode, bool):
            raise TypeError("Expected argument 'direct_mode' to be a bool")
        pulumi.set(__self__, "direct_mode", direct_mode)
        if dnat_entry_ids and not isinstance(dnat_entry_ids, list):
            raise TypeError("Expected argument 'dnat_entry_ids' to be a list")
        pulumi.set(__self__, "dnat_entry_ids", dnat_entry_ids)
        if eip_addresses and not isinstance(eip_addresses, list):
            raise TypeError("Expected argument 'eip_addresses' to be a list")
        pulumi.set(__self__, "eip_addresses", eip_addresses)
        if expired_time and not isinstance(expired_time, str):
            raise TypeError("Expected argument 'expired_time' to be a str")
        pulumi.set(__self__, "expired_time", expired_time)
        if id and not isinstance(id, str):
            raise TypeError("Expected argument 'id' to be a str")
        pulumi.set(__self__, "id", id)
        if lock_reason and not isinstance(lock_reason, str):
            raise TypeError("Expected argument 'lock_reason' to be a str")
        pulumi.set(__self__, "lock_reason", lock_reason)
        if nat_gateway_id and not isinstance(nat_gateway_id, str):
            raise TypeError("Expected argument 'nat_gateway_id' to be a str")
        pulumi.set(__self__, "nat_gateway_id", nat_gateway_id)
        if nat_gateway_name and not isinstance(nat_gateway_name, str):
            raise TypeError("Expected argument 'nat_gateway_name' to be a str")
        pulumi.set(__self__, "nat_gateway_name", nat_gateway_name)
        if nat_ip_addresses and not isinstance(nat_ip_addresses, list):
            raise TypeError("Expected argument 'nat_ip_addresses' to be a list")
        pulumi.set(__self__, "nat_ip_addresses", nat_ip_addresses)
        if network_interface_id and not isinstance(network_interface_id, str):
            raise TypeError("Expected argument 'network_interface_id' to be a str")
        pulumi.set(__self__, "network_interface_id", network_interface_id)
        if network_type and not isinstance(network_type, str):
            raise TypeError("Expected argument 'network_type' to be a str")
        pulumi.set(__self__, "network_type", network_type)
        if overdue_time and not isinstance(overdue_time, str):
            raise TypeError("Expected argument 'overdue_time' to be a str")
        pulumi.set(__self__, "overdue_time", overdue_time)
        if period and not isinstance(period, int):
            raise TypeError("Expected argument 'period' to be a int")
        pulumi.set(__self__, "period", period)
        if period_unit and not isinstance(period_unit, str):
            raise TypeError("Expected argument 'period_unit' to be a str")
        pulumi.set(__self__, "period_unit", period_unit)
        if project_name and not isinstance(project_name, str):
            raise TypeError("Expected argument 'project_name' to be a str")
        pulumi.set(__self__, "project_name", project_name)
        if smart_schedule_enabled and not isinstance(smart_schedule_enabled, bool):
            raise TypeError("Expected argument 'smart_schedule_enabled' to be a bool")
        pulumi.set(__self__, "smart_schedule_enabled", smart_schedule_enabled)
        if smart_schedule_rule and not isinstance(smart_schedule_rule, str):
            raise TypeError("Expected argument 'smart_schedule_rule' to be a str")
        pulumi.set(__self__, "smart_schedule_rule", smart_schedule_rule)
        if snat_entry_ids and not isinstance(snat_entry_ids, list):
            raise TypeError("Expected argument 'snat_entry_ids' to be a list")
        pulumi.set(__self__, "snat_entry_ids", snat_entry_ids)
        if spec and not isinstance(spec, str):
            raise TypeError("Expected argument 'spec' to be a str")
        pulumi.set(__self__, "spec", spec)
        if status and not isinstance(status, str):
            raise TypeError("Expected argument 'status' to be a str")
        pulumi.set(__self__, "status", status)
        if subnet_id and not isinstance(subnet_id, str):
            raise TypeError("Expected argument 'subnet_id' to be a str")
        pulumi.set(__self__, "subnet_id", subnet_id)
        if tags and not isinstance(tags, list):
            raise TypeError("Expected argument 'tags' to be a list")
        pulumi.set(__self__, "tags", tags)
        if updated_time and not isinstance(updated_time, str):
            raise TypeError("Expected argument 'updated_time' to be a str")
        pulumi.set(__self__, "updated_time", updated_time)
        if vpc_id and not isinstance(vpc_id, str):
            raise TypeError("Expected argument 'vpc_id' to be a str")
        pulumi.set(__self__, "vpc_id", vpc_id)
        if zone_id and not isinstance(zone_id, str):
            raise TypeError("Expected argument 'zone_id' to be a str")
        pulumi.set(__self__, "zone_id", zone_id)

    @property
    @pulumi.getter(name="billingType")
    def billing_type(self) -> builtins.int:
        """
        NAT网关的计费方式。取值如下：1 ：包年包月。2（默认值）：按量计费-按规格计费。3：按量计费-按使用量计费。当NetworkType传入intranet时，本参数仅支持且必须传入3。
        """
        return pulumi.get(self, "billing_type")

    @property
    @pulumi.getter(name="businessStatus")
    def business_status(self) -> builtins.str:
        """
        NAT网关是否被锁定。空值：正常未被锁定。Normal：正常未被锁定。FinancialLocked：因欠费被锁定。
        """
        return pulumi.get(self, "business_status")

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> builtins.str:
        """
        创建时间
        """
        return pulumi.get(self, "created_time")

    @property
    @pulumi.getter(name="deletedTime")
    def deleted_time(self) -> builtins.str:
        """
        删除时间
        """
        return pulumi.get(self, "deleted_time")

    @property
    @pulumi.getter
    def description(self) -> builtins.str:
        """
        NAT网关的描述。需要以字母、中文或数字开头。可包含英文逗号（,）、点号（.）、下划线（_）、空格（ ）、等号（=）、短横线（-）、中文逗号（，）、中文句号（。）。长度限制为1 ～ 255个字符。不填默认空字符串。
        """
        return pulumi.get(self, "description")

    @property
    @pulumi.getter(name="directMode")
    def direct_mode(self) -> builtins.bool:
        """
        标识该nat是直通还是非直通。   - true（默认）：EIP直通nat网关。   - false：非EIP直通nat网关。
        """
        return pulumi.get(self, "direct_mode")

    @property
    @pulumi.getter(name="dnatEntryIds")
    def dnat_entry_ids(self) -> Sequence[builtins.str]:
        """
        DNAT规则ID列表。
        """
        return pulumi.get(self, "dnat_entry_ids")

    @property
    @pulumi.getter(name="eipAddresses")
    def eip_addresses(self) -> Sequence['outputs.GetNgwEipAddressResult']:
        """
        NAT网关绑定公网IP的信息。
        """
        return pulumi.get(self, "eip_addresses")

    @property
    @pulumi.getter(name="expiredTime")
    def expired_time(self) -> builtins.str:
        """
        包年包月NAT网关到期时间。仅包年包月计费类型的NAT网关会返回此参数。
        """
        return pulumi.get(self, "expired_time")

    @property
    @pulumi.getter
    def id(self) -> builtins.str:
        """
        Uniquely identifies the resource.
        """
        return pulumi.get(self, "id")

    @property
    @pulumi.getter(name="lockReason")
    def lock_reason(self) -> builtins.str:
        """
        NAT被锁定的原因。financial：因欠费被锁定。security：因安全原因被锁定。
        """
        return pulumi.get(self, "lock_reason")

    @property
    @pulumi.getter(name="natGatewayId")
    def nat_gateway_id(self) -> builtins.str:
        """
        NAT网关ID。
        """
        return pulumi.get(self, "nat_gateway_id")

    @property
    @pulumi.getter(name="natGatewayName")
    def nat_gateway_name(self) -> builtins.str:
        """
        NAT网关的名称。需要以字母、中文或数字开头，可包含点号（.）、下划线（_）和短划线（-）。长度限制为1 ~ 128个字符。不填默认是NAT网关实例的ID。
        """
        return pulumi.get(self, "nat_gateway_name")

    @property
    @pulumi.getter(name="natIpAddresses")
    def nat_ip_addresses(self) -> Sequence['outputs.GetNgwNatIpAddressResult']:
        """
        私网NAT实例的中转IP列表。
        """
        return pulumi.get(self, "nat_ip_addresses")

    @property
    @pulumi.getter(name="networkInterfaceId")
    def network_interface_id(self) -> builtins.str:
        """
        NAT网关占用的网卡ID。
        """
        return pulumi.get(self, "network_interface_id")

    @property
    @pulumi.getter(name="networkType")
    def network_type(self) -> builtins.str:
        """
        NAT网关类型。internet：公网NAT网关。intranet：私网NAT网关。
        """
        return pulumi.get(self, "network_type")

    @property
    @pulumi.getter(name="overdueTime")
    def overdue_time(self) -> builtins.str:
        """
        资源冻结时间。仅当资源因为欠费冻结，此参数才会有返回值。
        """
        return pulumi.get(self, "overdue_time")

    @property
    @pulumi.getter
    def period(self) -> builtins.int:
        """
        购买包年包月NAT网关的时长，默认1。当PeriodUnit传入Month，Period取值范围：1 ~ 9、12、24、36。当PeriodUnit传入Year，Period取值范围：1 ~ 3。
        """
        return pulumi.get(self, "period")

    @property
    @pulumi.getter(name="periodUnit")
    def period_unit(self) -> builtins.str:
        """
        购买包年包月NAT网关时长的单位，默认Month。Month ：月。Year ：年。
        """
        return pulumi.get(self, "period_unit")

    @property
    @pulumi.getter(name="projectName")
    def project_name(self) -> builtins.str:
        """
        NAT网关所属项目的名称。不填默认加入default项目。
        """
        return pulumi.get(self, "project_name")

    @property
    @pulumi.getter(name="smartScheduleEnabled")
    def smart_schedule_enabled(self) -> builtins.bool:
        """
        是否开启智能调度。
        """
        return pulumi.get(self, "smart_schedule_enabled")

    @property
    @pulumi.getter(name="smartScheduleRule")
    def smart_schedule_rule(self) -> builtins.str:
        """
        智能调度策略规则。ChinaMobile：中国移动。ChinaUnicom：中国联通。ChinaTelecom：中国电信。BGP：BGP多线。
        """
        return pulumi.get(self, "smart_schedule_rule")

    @property
    @pulumi.getter(name="snatEntryIds")
    def snat_entry_ids(self) -> Sequence[builtins.str]:
        """
        SNAT规则ID列表。
        """
        return pulumi.get(self, "snat_entry_ids")

    @property
    @pulumi.getter
    def spec(self) -> builtins.str:
        """
        NAT网关的规格。Small（默认）：小型。Medium：中型。Large：大型。Extra*Large*1：超大型-1。Extra*Large*2：超大型-2。
        """
        return pulumi.get(self, "spec")

    @property
    @pulumi.getter
    def status(self) -> builtins.str:
        """
        NAT网关的状态。Available：可用。Creating：创建中。Pending：操作中。Deleting：删除中。
        """
        return pulumi.get(self, "status")

    @property
    @pulumi.getter(name="subnetId")
    def subnet_id(self) -> builtins.str:
        """
        NAT网关所在子网的ID。传入的子网，必须是VpcId传入的私有网络的子网。子网内至少有一个可用的私网IP。系统自动生成的NAT网关网卡将占用该子网一个私网IP。子网所在的可用区需要已部署NAT网关资源。子网所在可用区将作为NAT网关的主可用区，并自动关联备可用区。当主可用区发生故障时，NAT网关自动切换到备可用区。
        """
        return pulumi.get(self, "subnet_id")

    @property
    @pulumi.getter
    def tags(self) -> Sequence['outputs.GetNgwTagResult']:
        """
        标签列表。
        """
        return pulumi.get(self, "tags")

    @property
    @pulumi.getter(name="updatedTime")
    def updated_time(self) -> builtins.str:
        """
        NAT网关的最后操作时间。
        """
        return pulumi.get(self, "updated_time")

    @property
    @pulumi.getter(name="vpcId")
    def vpc_id(self) -> builtins.str:
        """
        NAT网关所在私有网络的ID。
        """
        return pulumi.get(self, "vpc_id")

    @property
    @pulumi.getter(name="zoneId")
    def zone_id(self) -> builtins.str:
        """
        NAT网关所属主可用区的ID。
        """
        return pulumi.get(self, "zone_id")


class AwaitableGetNgwResult(GetNgwResult):
    # pylint: disable=using-constant-test
    def __await__(self):
        if False:
            yield self
        return GetNgwResult(
            billing_type=self.billing_type,
            business_status=self.business_status,
            created_time=self.created_time,
            deleted_time=self.deleted_time,
            description=self.description,
            direct_mode=self.direct_mode,
            dnat_entry_ids=self.dnat_entry_ids,
            eip_addresses=self.eip_addresses,
            expired_time=self.expired_time,
            id=self.id,
            lock_reason=self.lock_reason,
            nat_gateway_id=self.nat_gateway_id,
            nat_gateway_name=self.nat_gateway_name,
            nat_ip_addresses=self.nat_ip_addresses,
            network_interface_id=self.network_interface_id,
            network_type=self.network_type,
            overdue_time=self.overdue_time,
            period=self.period,
            period_unit=self.period_unit,
            project_name=self.project_name,
            smart_schedule_enabled=self.smart_schedule_enabled,
            smart_schedule_rule=self.smart_schedule_rule,
            snat_entry_ids=self.snat_entry_ids,
            spec=self.spec,
            status=self.status,
            subnet_id=self.subnet_id,
            tags=self.tags,
            updated_time=self.updated_time,
            vpc_id=self.vpc_id,
            zone_id=self.zone_id)


def get_ngw(id: Optional[builtins.str] = None,
            opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetNgwResult:
    """
    Data Source schema for Byteplus::NatGateway::NGW


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke('bytepluscc:natgateway/getNgw:getNgw', __args__, opts=opts, typ=GetNgwResult).value

    return AwaitableGetNgwResult(
        billing_type=pulumi.get(__ret__, 'billing_type'),
        business_status=pulumi.get(__ret__, 'business_status'),
        created_time=pulumi.get(__ret__, 'created_time'),
        deleted_time=pulumi.get(__ret__, 'deleted_time'),
        description=pulumi.get(__ret__, 'description'),
        direct_mode=pulumi.get(__ret__, 'direct_mode'),
        dnat_entry_ids=pulumi.get(__ret__, 'dnat_entry_ids'),
        eip_addresses=pulumi.get(__ret__, 'eip_addresses'),
        expired_time=pulumi.get(__ret__, 'expired_time'),
        id=pulumi.get(__ret__, 'id'),
        lock_reason=pulumi.get(__ret__, 'lock_reason'),
        nat_gateway_id=pulumi.get(__ret__, 'nat_gateway_id'),
        nat_gateway_name=pulumi.get(__ret__, 'nat_gateway_name'),
        nat_ip_addresses=pulumi.get(__ret__, 'nat_ip_addresses'),
        network_interface_id=pulumi.get(__ret__, 'network_interface_id'),
        network_type=pulumi.get(__ret__, 'network_type'),
        overdue_time=pulumi.get(__ret__, 'overdue_time'),
        period=pulumi.get(__ret__, 'period'),
        period_unit=pulumi.get(__ret__, 'period_unit'),
        project_name=pulumi.get(__ret__, 'project_name'),
        smart_schedule_enabled=pulumi.get(__ret__, 'smart_schedule_enabled'),
        smart_schedule_rule=pulumi.get(__ret__, 'smart_schedule_rule'),
        snat_entry_ids=pulumi.get(__ret__, 'snat_entry_ids'),
        spec=pulumi.get(__ret__, 'spec'),
        status=pulumi.get(__ret__, 'status'),
        subnet_id=pulumi.get(__ret__, 'subnet_id'),
        tags=pulumi.get(__ret__, 'tags'),
        updated_time=pulumi.get(__ret__, 'updated_time'),
        vpc_id=pulumi.get(__ret__, 'vpc_id'),
        zone_id=pulumi.get(__ret__, 'zone_id'))
def get_ngw_output(id: Optional[pulumi.Input[builtins.str]] = None,
                   opts: Optional[Union[pulumi.InvokeOptions, pulumi.InvokeOutputOptions]] = None) -> pulumi.Output[GetNgwResult]:
    """
    Data Source schema for Byteplus::NatGateway::NGW


    :param builtins.str id: Uniquely identifies the resource.
    """
    __args__ = dict()
    __args__['id'] = id
    opts = pulumi.InvokeOutputOptions.merge(_utilities.get_invoke_opts_defaults(), opts)
    __ret__ = pulumi.runtime.invoke_output('bytepluscc:natgateway/getNgw:getNgw', __args__, opts=opts, typ=GetNgwResult)
    return __ret__.apply(lambda __response__: GetNgwResult(
        billing_type=pulumi.get(__response__, 'billing_type'),
        business_status=pulumi.get(__response__, 'business_status'),
        created_time=pulumi.get(__response__, 'created_time'),
        deleted_time=pulumi.get(__response__, 'deleted_time'),
        description=pulumi.get(__response__, 'description'),
        direct_mode=pulumi.get(__response__, 'direct_mode'),
        dnat_entry_ids=pulumi.get(__response__, 'dnat_entry_ids'),
        eip_addresses=pulumi.get(__response__, 'eip_addresses'),
        expired_time=pulumi.get(__response__, 'expired_time'),
        id=pulumi.get(__response__, 'id'),
        lock_reason=pulumi.get(__response__, 'lock_reason'),
        nat_gateway_id=pulumi.get(__response__, 'nat_gateway_id'),
        nat_gateway_name=pulumi.get(__response__, 'nat_gateway_name'),
        nat_ip_addresses=pulumi.get(__response__, 'nat_ip_addresses'),
        network_interface_id=pulumi.get(__response__, 'network_interface_id'),
        network_type=pulumi.get(__response__, 'network_type'),
        overdue_time=pulumi.get(__response__, 'overdue_time'),
        period=pulumi.get(__response__, 'period'),
        period_unit=pulumi.get(__response__, 'period_unit'),
        project_name=pulumi.get(__response__, 'project_name'),
        smart_schedule_enabled=pulumi.get(__response__, 'smart_schedule_enabled'),
        smart_schedule_rule=pulumi.get(__response__, 'smart_schedule_rule'),
        snat_entry_ids=pulumi.get(__response__, 'snat_entry_ids'),
        spec=pulumi.get(__response__, 'spec'),
        status=pulumi.get(__response__, 'status'),
        subnet_id=pulumi.get(__response__, 'subnet_id'),
        tags=pulumi.get(__response__, 'tags'),
        updated_time=pulumi.get(__response__, 'updated_time'),
        vpc_id=pulumi.get(__response__, 'vpc_id'),
        zone_id=pulumi.get(__response__, 'zone_id')))
