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

export interface EndpointsArgs extends core.SchemaArgs {
  endpoint: string | core.StringOut;

  endpointType: string | core.StringOut;
}

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

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

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

  directPutContent: boolean | core.BooleanOut;

  faqIds: core.Array<string> | core.ArrayOut<core.StringOut>;
}

export class ContentSourceConfiguration extends core.Schema<ContentSourceConfigurationArgs> {
  @core.attr(String, { computed: true, kind: "array" })
  public dataSourceIds!: core.Array<string> | core.ArrayOut<core.StringOut>;

  @core.attr(Boolean, { computed: true })
  public directPutContent!: boolean | core.BooleanOut;

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

export interface UserIdentityConfigurationArgs extends core.SchemaArgs {
  identityAttributeName: string | core.StringOut;
}

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

export interface ConfigurationArgs extends core.SchemaArgs {
  contentSourceConfiguration:
    | core.Array<ContentSourceConfiguration>
    | core.ArrayOut<ContentSourceConfiguration>;

  userIdentityConfiguration:
    | core.Array<UserIdentityConfiguration>
    | core.ArrayOut<UserIdentityConfiguration>;
}

export class Configuration extends core.Schema<ConfigurationArgs> {
  @core.attr(ContentSourceConfiguration, { computed: true, kind: "array" })
  public contentSourceConfiguration!:
    | core.Array<ContentSourceConfiguration>
    | core.ArrayOut<ContentSourceConfiguration>;

  @core.attr(UserIdentityConfiguration, { computed: true, kind: "array" })
  public userIdentityConfiguration!:
    | core.Array<UserIdentityConfiguration>
    | core.ArrayOut<UserIdentityConfiguration>;
}

export interface DsExperienceArgs {
  experienceId: string | core.StringOut;

  indexId: string | core.StringOut;
}

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

  @core.attr(Configuration, { computed: true, kind: "array" })
  public configuration!:
    | core.Array<Configuration>
    | core.ArrayOut<Configuration>;

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

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

  @core.attr(Endpoints, { computed: true, kind: "array" })
  public endpoints!: core.Array<Endpoints> | core.ArrayOut<Endpoints>;

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

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

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

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

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

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

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

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

  constructor(name: string, args?: DsExperienceArgs) {
    super(name, "aws_kendra_experience", args);
  }

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