/**
 * Copyright (c) HashiCorp, Inc.
 * SPDX-License-Identifier: MPL-2.0
 */
import { Construct } from 'constructs';
import * as cdktf from 'cdktf';
export interface BeyondcorpApplicationConfig extends cdktf.TerraformMetaArguments {
    /**
    * Optional. User-settable Application resource ID.
    * * Must start with a letter.
    * * Must contain between 4-63 characters from '/a-z-/'.
    * * Must end with a number or letter.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#application_id BeyondcorpApplication#application_id}
    */
    readonly applicationId: string;
    /**
    * Optional. An arbitrary user-provided name for the Application resource.
    * Cannot exceed 64 characters.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#display_name BeyondcorpApplication#display_name}
    */
    readonly displayName?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#id BeyondcorpApplication#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;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#project BeyondcorpApplication#project}
    */
    readonly project?: string;
    /**
    * Part of 'parent'. See documentation of 'projectsId'.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#security_gateways_id BeyondcorpApplication#security_gateways_id}
    */
    readonly securityGatewaysId: string;
    /**
    * endpoint_matchers block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#endpoint_matchers BeyondcorpApplication#endpoint_matchers}
    */
    readonly endpointMatchers: BeyondcorpApplicationEndpointMatchers[] | cdktf.IResolvable;
    /**
    * timeouts block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#timeouts BeyondcorpApplication#timeouts}
    */
    readonly timeouts?: BeyondcorpApplicationTimeouts;
    /**
    * upstreams block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#upstreams BeyondcorpApplication#upstreams}
    */
    readonly upstreams?: BeyondcorpApplicationUpstreams[] | cdktf.IResolvable;
}
export interface BeyondcorpApplicationEndpointMatchers {
    /**
    * Required. Hostname of the application.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#hostname BeyondcorpApplication#hostname}
    */
    readonly hostname: string;
    /**
    * Optional. Ports of the application.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#ports BeyondcorpApplication#ports}
    */
    readonly ports?: number[];
}
export declare function beyondcorpApplicationEndpointMatchersToTerraform(struct?: BeyondcorpApplicationEndpointMatchers | cdktf.IResolvable): any;
export declare function beyondcorpApplicationEndpointMatchersToHclTerraform(struct?: BeyondcorpApplicationEndpointMatchers | cdktf.IResolvable): any;
export declare class BeyondcorpApplicationEndpointMatchersOutputReference 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(): BeyondcorpApplicationEndpointMatchers | cdktf.IResolvable | undefined;
    set internalValue(value: BeyondcorpApplicationEndpointMatchers | cdktf.IResolvable | undefined);
    private _hostname?;
    get hostname(): string;
    set hostname(value: string);
    get hostnameInput(): string | undefined;
    private _ports?;
    get ports(): number[];
    set ports(value: number[]);
    resetPorts(): void;
    get portsInput(): number[] | undefined;
}
export declare class BeyondcorpApplicationEndpointMatchersList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: BeyondcorpApplicationEndpointMatchers[] | 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): BeyondcorpApplicationEndpointMatchersOutputReference;
}
export interface BeyondcorpApplicationTimeouts {
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#create BeyondcorpApplication#create}
    */
    readonly create?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#delete BeyondcorpApplication#delete}
    */
    readonly delete?: string;
    /**
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#update BeyondcorpApplication#update}
    */
    readonly update?: string;
}
export declare function beyondcorpApplicationTimeoutsToTerraform(struct?: BeyondcorpApplicationTimeouts | cdktf.IResolvable): any;
export declare function beyondcorpApplicationTimeoutsToHclTerraform(struct?: BeyondcorpApplicationTimeouts | cdktf.IResolvable): any;
export declare class BeyondcorpApplicationTimeoutsOutputReference 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(): BeyondcorpApplicationTimeouts | cdktf.IResolvable | undefined;
    set internalValue(value: BeyondcorpApplicationTimeouts | 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;
}
export interface BeyondcorpApplicationUpstreamsEgressPolicy {
    /**
    * Required. List of regions where the application sends traffic to.
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#regions BeyondcorpApplication#regions}
    */
    readonly regions: string[];
}
export declare function beyondcorpApplicationUpstreamsEgressPolicyToTerraform(struct?: BeyondcorpApplicationUpstreamsEgressPolicyOutputReference | BeyondcorpApplicationUpstreamsEgressPolicy): any;
export declare function beyondcorpApplicationUpstreamsEgressPolicyToHclTerraform(struct?: BeyondcorpApplicationUpstreamsEgressPolicyOutputReference | BeyondcorpApplicationUpstreamsEgressPolicy): any;
export declare class BeyondcorpApplicationUpstreamsEgressPolicyOutputReference 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(): BeyondcorpApplicationUpstreamsEgressPolicy | undefined;
    set internalValue(value: BeyondcorpApplicationUpstreamsEgressPolicy | undefined);
    private _regions?;
    get regions(): string[];
    set regions(value: string[]);
    get regionsInput(): string[] | undefined;
}
export interface BeyondcorpApplicationUpstreamsNetwork {
    /**
    * Required. Network name is of the format:
    * 'projects/{project}/global/networks/{network}'
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#name BeyondcorpApplication#name}
    */
    readonly name: string;
}
export declare function beyondcorpApplicationUpstreamsNetworkToTerraform(struct?: BeyondcorpApplicationUpstreamsNetworkOutputReference | BeyondcorpApplicationUpstreamsNetwork): any;
export declare function beyondcorpApplicationUpstreamsNetworkToHclTerraform(struct?: BeyondcorpApplicationUpstreamsNetworkOutputReference | BeyondcorpApplicationUpstreamsNetwork): any;
export declare class BeyondcorpApplicationUpstreamsNetworkOutputReference 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(): BeyondcorpApplicationUpstreamsNetwork | undefined;
    set internalValue(value: BeyondcorpApplicationUpstreamsNetwork | undefined);
    private _name?;
    get name(): string;
    set name(value: string);
    get nameInput(): string | undefined;
}
export interface BeyondcorpApplicationUpstreams {
    /**
    * egress_policy block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#egress_policy BeyondcorpApplication#egress_policy}
    */
    readonly egressPolicy?: BeyondcorpApplicationUpstreamsEgressPolicy;
    /**
    * network block
    *
    * Docs at Terraform Registry: {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#network BeyondcorpApplication#network}
    */
    readonly network?: BeyondcorpApplicationUpstreamsNetwork;
}
export declare function beyondcorpApplicationUpstreamsToTerraform(struct?: BeyondcorpApplicationUpstreams | cdktf.IResolvable): any;
export declare function beyondcorpApplicationUpstreamsToHclTerraform(struct?: BeyondcorpApplicationUpstreams | cdktf.IResolvable): any;
export declare class BeyondcorpApplicationUpstreamsOutputReference 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(): BeyondcorpApplicationUpstreams | cdktf.IResolvable | undefined;
    set internalValue(value: BeyondcorpApplicationUpstreams | cdktf.IResolvable | undefined);
    private _egressPolicy;
    get egressPolicy(): BeyondcorpApplicationUpstreamsEgressPolicyOutputReference;
    putEgressPolicy(value: BeyondcorpApplicationUpstreamsEgressPolicy): void;
    resetEgressPolicy(): void;
    get egressPolicyInput(): BeyondcorpApplicationUpstreamsEgressPolicy | undefined;
    private _network;
    get network(): BeyondcorpApplicationUpstreamsNetworkOutputReference;
    putNetwork(value: BeyondcorpApplicationUpstreamsNetwork): void;
    resetNetwork(): void;
    get networkInput(): BeyondcorpApplicationUpstreamsNetwork | undefined;
}
export declare class BeyondcorpApplicationUpstreamsList extends cdktf.ComplexList {
    protected terraformResource: cdktf.IInterpolatingParent;
    protected terraformAttribute: string;
    protected wrapsSet: boolean;
    internalValue?: BeyondcorpApplicationUpstreams[] | 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): BeyondcorpApplicationUpstreamsOutputReference;
}
/**
* Represents a {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application google_beyondcorp_application}
*/
export declare class BeyondcorpApplication extends cdktf.TerraformResource {
    static readonly tfResourceType = "google_beyondcorp_application";
    /**
    * Generates CDKTF code for importing a BeyondcorpApplication 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 BeyondcorpApplication to import
    * @param importFromId The id of the existing BeyondcorpApplication that should be imported. Refer to the {@link https://registry.terraform.io/providers/hashicorp/google/6.35.0/docs/resources/beyondcorp_application#import import section} in the documentation of this resource for the id to use
    * @param provider? Optional instance of the provider where the BeyondcorpApplication 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.35.0/docs/resources/beyondcorp_application google_beyondcorp_application} 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 BeyondcorpApplicationConfig
    */
    constructor(scope: Construct, id: string, config: BeyondcorpApplicationConfig);
    private _applicationId?;
    get applicationId(): string;
    set applicationId(value: string);
    get applicationIdInput(): string | undefined;
    get createTime(): string;
    private _displayName?;
    get displayName(): string;
    set displayName(value: string);
    resetDisplayName(): void;
    get displayNameInput(): string | undefined;
    private _id?;
    get id(): string;
    set id(value: string);
    resetId(): void;
    get idInput(): string | undefined;
    get name(): string;
    private _project?;
    get project(): string;
    set project(value: string);
    resetProject(): void;
    get projectInput(): string | undefined;
    private _securityGatewaysId?;
    get securityGatewaysId(): string;
    set securityGatewaysId(value: string);
    get securityGatewaysIdInput(): string | undefined;
    get updateTime(): string;
    private _endpointMatchers;
    get endpointMatchers(): BeyondcorpApplicationEndpointMatchersList;
    putEndpointMatchers(value: BeyondcorpApplicationEndpointMatchers[] | cdktf.IResolvable): void;
    get endpointMatchersInput(): cdktf.IResolvable | BeyondcorpApplicationEndpointMatchers[] | undefined;
    private _timeouts;
    get timeouts(): BeyondcorpApplicationTimeoutsOutputReference;
    putTimeouts(value: BeyondcorpApplicationTimeouts): void;
    resetTimeouts(): void;
    get timeoutsInput(): cdktf.IResolvable | BeyondcorpApplicationTimeouts | undefined;
    private _upstreams;
    get upstreams(): BeyondcorpApplicationUpstreamsList;
    putUpstreams(value: BeyondcorpApplicationUpstreams[] | cdktf.IResolvable): void;
    resetUpstreams(): void;
    get upstreamsInput(): cdktf.IResolvable | BeyondcorpApplicationUpstreams[] | undefined;
    protected synthesizeAttributes(): {
        [name: string]: any;
    };
    protected synthesizeHclAttributes(): {
        [name: string]: any;
    };
}
