/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface ComputeRouterConfig extends cdktf.TerraformMetaArguments {
    /**
    * An optional description of this resource.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#description ComputeRouter#description}
    */
    readonly description?: string;
    /**
    * Indicates if a router is dedicated for use with encrypted VLAN
    * attachments (interconnectAttachments).
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#encrypted_interconnect_router ComputeRouter#encrypted_interconnect_router}
    */
    readonly encryptedInterconnectRouter?: boolean | cdktf.IResolvable;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#id ComputeRouter#id}
    *
    * Please be aware that the id field is automatically added to all resources in Terraform providers using a Terraform provider SDK version below 2.
    * If you experience problems setting this value it might not be settable. Please take a look at the provider documentation to ensure it should be settable.
    */
    readonly id?: string;
    /**
    * Name of the resource. The name must be 1-63 characters long, and
    * comply with RFC1035. Specifically, the name must be 1-63 characters
    * long and match the regular expression '[a-z]([-a-z0-9]*[a-z0-9])?'
    * which means the first character must be a lowercase letter, and all
    * following characters must be a dash, lowercase letter, or digit,
    * except the last character, which cannot be a dash.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#name ComputeRouter#name}
    */
    readonly name: string;
    /**
    * A reference to the network to which this router belongs.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#network ComputeRouter#network}
    */
    readonly network: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#project ComputeRouter#project}
    */
    readonly project?: string;
    /**
    * Region where the router resides.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#region ComputeRouter#region}
    */
    readonly region?: string;
    /**
    * bgp block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#bgp ComputeRouter#bgp}
    */
    readonly bgp?: ComputeRouterBgp;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#timeouts ComputeRouter#timeouts}
    */
    readonly timeouts?: ComputeRouterTimeouts;
}
export interface ComputeRouterBgpAdvertisedIpRanges {
    /**
    * User-specified description for the IP range.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#description ComputeRouter#description}
    */
    readonly description?: string;
    /**
    * The IP range to advertise. The value must be a
    * CIDR-formatted string.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#range ComputeRouter#range}
    */
    readonly range: string;
}
export declare function computeRouterBgpAdvertisedIpRangesToTerraform(struct?: ComputeRouterBgpAdvertisedIpRanges | cdktf.IResolvable): any;
export declare function computeRouterBgpAdvertisedIpRangesToHclTerraform(struct?: ComputeRouterBgpAdvertisedIpRanges | cdktf.IResolvable): any;
export declare class ComputeRouterBgpAdvertisedIpRangesOutputReference 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(): ComputeRouterBgpAdvertisedIpRanges | cdktf.IResolvable | undefined;
    set internalValue(value: ComputeRouterBgpAdvertisedIpRanges | cdktf.IResolvable | undefined);
    private _description?;
    get description(): string;
    set description(value: string);
    resetDescription(): void;
    get descriptionInput(): string | undefined;
    private _range?;
    get range(): string;
    set range(value: string);
    get rangeInput(): string | undefined;
}
export declare class ComputeRouterBgpAdvertisedIpRangesList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: ComputeRouterBgpAdvertisedIpRanges[] | 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): ComputeRouterBgpAdvertisedIpRangesOutputReference;
}
export interface ComputeRouterBgp {
    /**
    * User-specified flag to indicate which mode to use for advertisement. Default value: "DEFAULT" Possible values: ["DEFAULT", "CUSTOM"]
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#advertise_mode ComputeRouter#advertise_mode}
    */
    readonly advertiseMode?: string;
    /**
    * User-specified list of prefix groups to advertise in custom mode.
    * This field can only be populated if advertiseMode is CUSTOM and
    * is advertised to all peers of the router. These groups will be
    * advertised in addition to any specified prefixes. Leave this field
    * blank to advertise no custom groups.
    *
    * This enum field has the one valid value: ALL_SUBNETS
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#advertised_groups ComputeRouter#advertised_groups}
    */
    readonly advertisedGroups?: string[];
    /**
    * Local BGP Autonomous System Number (ASN). Must be an RFC6996
    * private ASN, either 16-bit or 32-bit. The value will be fixed for
    * this router resource. All VPN tunnels that link to this router
    * will have the same local ASN.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#asn ComputeRouter#asn}
    */
    readonly asn: number;
    /**
    * Explicitly specifies a range of valid BGP Identifiers for this Router.
    * It is provided as a link-local IPv4 range (from 169.254.0.0/16), of
    * size at least /30, even if the BGP sessions are over IPv6. It must
    * not overlap with any IPv4 BGP session ranges. Other vendors commonly
    * call this router ID.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#identifier_range ComputeRouter#identifier_range}
    */
    readonly identifierRange?: string;
    /**
    * The interval in seconds between BGP keepalive messages that are sent
    * to the peer. Hold time is three times the interval at which keepalive
    * messages are sent, and the hold time is the maximum number of seconds
    * allowed to elapse between successive keepalive messages that BGP
    * receives from a peer.
    *
    * BGP will use the smaller of either the local hold time value or the
    * peer's hold time value as the hold time for the BGP connection
    * between the two peers. If set, this value must be between 20 and 60.
    * The default is 20.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#keepalive_interval ComputeRouter#keepalive_interval}
    */
    readonly keepaliveInterval?: number;
    /**
    * advertised_ip_ranges block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#advertised_ip_ranges ComputeRouter#advertised_ip_ranges}
    */
    readonly advertisedIpRanges?: ComputeRouterBgpAdvertisedIpRanges[] | cdktf.IResolvable;
}
export declare function computeRouterBgpToTerraform(struct?: ComputeRouterBgpOutputReference | ComputeRouterBgp): any;
export declare function computeRouterBgpToHclTerraform(struct?: ComputeRouterBgpOutputReference | ComputeRouterBgp): any;
export declare class ComputeRouterBgpOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): ComputeRouterBgp | undefined;
    set internalValue(value: ComputeRouterBgp | undefined);
    private _advertiseMode?;
    get advertiseMode(): string;
    set advertiseMode(value: string);
    resetAdvertiseMode(): void;
    get advertiseModeInput(): string | undefined;
    private _advertisedGroups?;
    get advertisedGroups(): string[];
    set advertisedGroups(value: string[]);
    resetAdvertisedGroups(): void;
    get advertisedGroupsInput(): string[] | undefined;
    private _asn?;
    get asn(): number;
    set asn(value: number);
    get asnInput(): number | undefined;
    private _identifierRange?;
    get identifierRange(): string;
    set identifierRange(value: string);
    resetIdentifierRange(): void;
    get identifierRangeInput(): string | undefined;
    private _keepaliveInterval?;
    get keepaliveInterval(): number;
    set keepaliveInterval(value: number);
    resetKeepaliveInterval(): void;
    get keepaliveIntervalInput(): number | undefined;
    private _advertisedIpRanges;
    get advertisedIpRanges(): ComputeRouterBgpAdvertisedIpRangesList;
    putAdvertisedIpRanges(value: ComputeRouterBgpAdvertisedIpRanges[] | cdktf.IResolvable): void;
    resetAdvertisedIpRanges(): void;
    get advertisedIpRangesInput(): cdktf.IResolvable | ComputeRouterBgpAdvertisedIpRanges[] | undefined;
}
export interface ComputeRouterTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#create ComputeRouter#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#delete ComputeRouter#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#update ComputeRouter#update}
    */
    readonly update?: string;
}
export declare function computeRouterTimeoutsToTerraform(struct?: ComputeRouterTimeouts | cdktf.IResolvable): any;
export declare function computeRouterTimeoutsToHclTerraform(struct?: ComputeRouterTimeouts | cdktf.IResolvable): any;
export declare class ComputeRouterTimeoutsOutputReference extends cdktf.ComplexObject {
    private isEmptyObject;
    private resolvableValue?;
    /**
    * @param terraformResource The parent resource
    * @param terraformAttribute The attribute on the parent resource this class is referencing
    */
    constructor(terraformResource: cdktf.IInterpolatingParent, terraformAttribute: string);
    get internalValue(): ComputeRouterTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: ComputeRouterTimeouts | cdktf.IResolvable | undefined);
    private _create?;
    get create(): string;
    set create(value: string);
    resetCreate(): void;
    get createInput(): string | undefined;
    private _delete?;
    get delete(): string;
    set delete(value: string);
    resetDelete(): void;
    get deleteInput(): string | undefined;
    private _update?;
    get update(): string;
    set update(value: string);
    resetUpdate(): void;
    get updateInput(): string | undefined;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router google_compute_router}
*/
export declare class ComputeRouter extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_compute_router";
    /**
    * Generates CDKTF code for importing a ComputeRouter 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 ComputeRouter to import
    * @param importFromId The id of the existing ComputeRouter that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.13.0/docs/resources/compute_router#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the ComputeRouter 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/hashicorp/google/6.13.0/docs/resources/compute_router google_compute_router} 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 ComputeRouterConfig
    */
    constructor(scope: Construct, id: string, config: ComputeRouterConfig);
    get creationTimestamp(): string;
    private _description?;
    get description(): string;
    set description(value: string);
    resetDescription(): void;
    get descriptionInput(): string | undefined;
    private _encryptedInterconnectRouter?;
    get encryptedInterconnectRouter(): boolean | cdktf.IResolvable;
    set encryptedInterconnectRouter(value: boolean | cdktf.IResolvable);
    resetEncryptedInterconnectRouter(): void;
    get encryptedInterconnectRouterInput(): boolean | cdktf.IResolvable | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    private _name?;
    get name(): string;
    set name(value: string);
    get nameInput(): string | undefined;
    private _network?;
    get network(): string;
    set network(value: string);
    get networkInput(): string | undefined;
    private _project?;
    get project(): string;
    set project(value: string);
    resetProject(): void;
    get projectInput(): string | undefined;
    private _region?;
    get region(): string;
    set region(value: string);
    resetRegion(): void;
    get regionInput(): string | undefined;
    get selfLink(): string;
    private _bgp;
    get bgp(): ComputeRouterBgpOutputReference;
    putBgp(value: ComputeRouterBgp): void;
    resetBgp(): void;
    get bgpInput(): ComputeRouterBgp | undefined;
    private _timeouts;
    get timeouts(): ComputeRouterTimeoutsOutputReference;
    putTimeouts(value: ComputeRouterTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | ComputeRouterTimeouts | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
