/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface NetworkConfig extends cdktf.TerraformMetaArguments {
    /**
    * User defined key-value pairs to classify the network.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#labels Network#labels}
    */
    readonly labels?: {
        [key: string]: string;
    };
    /**
    * Name of the network.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#name Network#name}
    */
    readonly name: string;
    /**
    * UUID of a router to attach to this network.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#router Network#router}
    */
    readonly router?: string;
    /**
    * The zone the network is in, e.g. `de-fra1`. You can list available zones with `upctl zone list`.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#zone Network#zone}
    */
    readonly zone: string;
    /**
    * ip_network block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#ip_network Network#ip_network}
    */
    readonly ipNetwork?: NetworkIpNetwork[] | cdktf.IResolvable;
}
export interface NetworkIpNetwork {
    /**
    * The CIDR range of the subnet
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#address Network#address}
    */
    readonly address: string;
    /**
    * Is DHCP enabled?
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#dhcp Network#dhcp}
    */
    readonly dhcp: boolean | cdktf.IResolvable;
    /**
    * Is the gateway the DHCP default route?
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#dhcp_default_route Network#dhcp_default_route}
    */
    readonly dhcpDefaultRoute?: boolean | cdktf.IResolvable;
    /**
    * The DNS servers given by DHCP
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#dhcp_dns Network#dhcp_dns}
    */
    readonly dhcpDns?: string[];
    /**
    * The additional DHCP classless static routes given by DHCP
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#dhcp_routes Network#dhcp_routes}
    */
    readonly dhcpRoutes?: string[];
    /**
    * IP address family
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#family Network#family}
    */
    readonly family: string;
    /**
    * Gateway address given by DHCP
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#gateway Network#gateway}
    */
    readonly gateway?: string;
}
export declare function networkIpNetworkToTerraform(struct?: NetworkIpNetwork | cdktf.IResolvable): any;
export declare function networkIpNetworkToHclTerraform(struct?: NetworkIpNetwork | cdktf.IResolvable): any;
export declare class NetworkIpNetworkOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param complexObjectIndex the index of this item in the list
    * @param complexObjectIsFromSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, complexObjectIndex: number, complexObjectIsFromSet: boolean);
    get internalValue(): NetworkIpNetwork | cdktf.IResolvable | undefined;
    set internalValue(value: NetworkIpNetwork | cdktf.IResolvable | undefined);
    private _address?;
    get address(): string;
    set address(value: string);
    get addressInput(): string | undefined;
    private _dhcp?;
    get dhcp(): boolean | cdktf.IResolvable;
    set dhcp(value: boolean | cdktf.IResolvable);
    get dhcpInput(): boolean | cdktf.IResolvable | undefined;
    private _dhcpDefaultRoute?;
    get dhcpDefaultRoute(): boolean | cdktf.IResolvable;
    set dhcpDefaultRoute(value: boolean | cdktf.IResolvable);
    resetDhcpDefaultRoute(): void;
    get dhcpDefaultRouteInput(): boolean | cdktf.IResolvable | undefined;
    private _dhcpDns?;
    get dhcpDns(): string[];
    set dhcpDns(value: string[]);
    resetDhcpDns(): void;
    get dhcpDnsInput(): string[] | undefined;
    private _dhcpRoutes?;
    get dhcpRoutes(): string[];
    set dhcpRoutes(value: string[]);
    resetDhcpRoutes(): void;
    get dhcpRoutesInput(): string[] | undefined;
    private _family?;
    get family(): string;
    set family(value: string);
    get familyInput(): string | undefined;
    private _gateway?;
    get gateway(): string;
    set gateway(value: string);
    resetGateway(): void;
    get gatewayInput(): string | undefined;
}
export declare class NetworkIpNetworkList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: NetworkIpNetwork[] | cdktf.IResolvable;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    * @param wrapsSet whether the list is wrapping a set (will add tolist() to be able to access an item via an index)
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string, wrapsSet: boolean);
    /**
    * @param index the index of the item to return
    */
    get(index: number): NetworkIpNetworkOutputReference;
}
/**
* Represents a {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network upcloud_network}
*/
export declare class Network extends cdktf.TerraformResource {
    static readonly tfResourceType = "upcloud_network";
    /**
    * Generates CDKTF code for importing a Network resource upon running "cdktf plan <stack-name>"
    * @param scope The scope in which to define this construct
    * @param importToId The construct id used in the generated config for the Network to import
    * @param importFromId The id of the existing Network that should be imported. Refer to the {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the Network to import is found
    */
    static generateConfigForImport(scope: Construct, importToId: string, importFromId: string, provider?: cdktf.TerraformProvider): cdktf.ImportableResource;
    /**
    * Create a new {@link https://registry.terraform.io/providers/upcloudltd/upcloud/5.20.5/docs/resources/network upcloud_network} Resource
    *
    * @param scope The scope in which to define this construct
    * @param id The scoped construct ID. Must be unique amongst siblings in the same scope
    * @param options NetworkConfig
    */
    constructor(scope: Construct, id: string, config: NetworkConfig);
    get id(): string;
    private _labels?;
    get labels(): {
        [key: string]: string;
    };
    set labels(value: {
        [key: string]: string;
    });
    resetLabels(): void;
    get labelsInput(): {
        [key: string]: string;
    } | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    get nameInput(): string | undefined;
    private _router?;
    get router(): string;
    set router(value: string);
    resetRouter(): void;
    get routerInput(): string | undefined;
    get type(): string;
    private _zone?;
    get zone(): string;
    set zone(value: string);
    get zoneInput(): string | undefined;
    private _ipNetwork;
    get ipNetwork(): NetworkIpNetworkList;
    putIpNetwork(value: NetworkIpNetwork[] | cdktf.IResolvable): void;
    resetIpNetwork(): void;
    get ipNetworkInput(): cdktf.IResolvable | NetworkIpNetwork[] | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
