import * as core from "@terrascript/core";

export interface NetworkArgs extends core.SchemaArgs {
  securityGroupIds: core.Array<string> | core.ArrayOut<core.StringOut>;

  subnetIds: core.Array<string> | core.ArrayOut<core.StringOut>;

  vpcId: string | core.StringOut;
}

export class Network extends core.Schema<NetworkArgs> {
  @core.attr(String, { kind: "array" })
  public securityGroupIds!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String, { kind: "array" })
  public subnetIds!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(String)
  public vpcId!: string | core.StringOut;
}

export interface IdentityProviderArgs extends core.SchemaArgs {
  samlMetadata: string | core.StringOut;

  type: string | core.StringOut;
}

export class IdentityProvider extends core.Schema<IdentityProviderArgs> {
  @core.attr(String)
  public samlMetadata!: string | core.StringOut;

  @core.attr(String)
  public type!: string | core.StringOut;
}

export interface FleetArgs extends core.ResourceArgs {
  auditStreamArn?: string | core.StringOut;

  deviceCaCertificate?: string | core.StringOut;

  displayName?: string | core.StringOut;

  identityProvider?: IdentityProvider;

  name: string | core.StringOut;

  network?: Network;

  optimizeForEndUserLocation?: boolean | core.BooleanOut;
}

export class Fleet extends core.Resource<FleetArgs> {
  @core.attr(String, { computed: true })
  public arn!: string | core.StringOut;

  @core.attr(String)
  public auditStreamArn?: string | core.StringOut;

  @core.attr(String, { computed: true })
  public companyCode!: string | core.StringOut;

  @core.attr(String, { computed: true })
  public createdTime!: string | core.StringOut;

  @core.attr(String)
  public deviceCaCertificate?: string | core.StringOut;

  @core.attr(String)
  public displayName?: string | core.StringOut;

  @core.attr(String, { computed: true })
  public id!: string | core.StringOut;

  @core.attr(IdentityProvider)
  public identityProvider?: IdentityProvider;

  @core.attr(String, { computed: true })
  public lastUpdatedTime!: string | core.StringOut;

  @core.attr(String)
  public name!: string | core.StringOut;

  @core.attr(Network)
  public network?: Network;

  @core.attr(Boolean)
  public optimizeForEndUserLocation?: boolean | core.BooleanOut;

  constructor(name: string, args?: FleetArgs) {
    super(name, "aws_worklink_fleet", args);
  }

  public override getNamespace(): string {
    return "aws_worklink";
  }
}
