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

export interface LevelFourArgs extends core.SchemaArgs {
  arn: string | core.StringOut;

  id: string | core.StringOut;

  name: string | core.StringOut;
}

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

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

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

export interface LevelFiveArgs extends core.SchemaArgs {
  arn: string | core.StringOut;

  id: string | core.StringOut;

  name: string | core.StringOut;
}

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

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

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

export interface LevelOneArgs extends core.SchemaArgs {
  arn: string | core.StringOut;

  id: string | core.StringOut;

  name: string | core.StringOut;
}

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

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

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

export interface LevelTwoArgs extends core.SchemaArgs {
  arn: string | core.StringOut;

  id: string | core.StringOut;

  name: string | core.StringOut;
}

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

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

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

export interface LevelThreeArgs extends core.SchemaArgs {
  arn: string | core.StringOut;

  id: string | core.StringOut;

  name: string | core.StringOut;
}

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

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

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

export interface HierarchyStructureArgs extends core.SchemaArgs {
  levelFive?: LevelFive;

  levelFour?: LevelFour;

  levelOne?: LevelOne;

  levelThree?: LevelThree;

  levelTwo?: LevelTwo;
}

export class HierarchyStructure extends core.Schema<HierarchyStructureArgs> {
  @core.attr(LevelFive, { computed: true })
  public levelFive?: LevelFive;

  @core.attr(LevelFour, { computed: true })
  public levelFour?: LevelFour;

  @core.attr(LevelOne, { computed: true })
  public levelOne?: LevelOne;

  @core.attr(LevelThree, { computed: true })
  public levelThree?: LevelThree;

  @core.attr(LevelTwo, { computed: true })
  public levelTwo?: LevelTwo;
}

export interface UserHierarchyStructureArgs extends core.ResourceArgs {
  hierarchyStructure: HierarchyStructure;

  instanceId: string | core.StringOut;
}

export class UserHierarchyStructure extends core.Resource<UserHierarchyStructureArgs> {
  @core.attr(HierarchyStructure)
  public hierarchyStructure!: HierarchyStructure;

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

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

  constructor(name: string, args?: UserHierarchyStructureArgs) {
    super(name, "aws_connect_user_hierarchy_structure", args);
  }

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