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

export interface EntityTypesArgs extends core.SchemaArgs {
  type: string | core.StringOut;
}

export class EntityTypes extends core.Schema<EntityTypesArgs> {
  @core.attr(String)
  public type!: string | core.StringOut;
}

export interface AnnotationsArgs extends core.SchemaArgs {
  s3Uri: string | core.StringOut;

  testS3Uri?: string | core.StringOut;
}

export class Annotations extends core.Schema<AnnotationsArgs> {
  @core.attr(String)
  public s3Uri!: string | core.StringOut;

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

export interface AugmentedManifestsArgs extends core.SchemaArgs {
  annotationDataS3Uri?: string | core.StringOut;

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

  documentType?: string | core.StringOut;

  s3Uri: string | core.StringOut;

  sourceDocumentsS3Uri?: string | core.StringOut;

  split?: string | core.StringOut;
}

export class AugmentedManifests extends core.Schema<AugmentedManifestsArgs> {
  @core.attr(String)
  public annotationDataS3Uri?: string | core.StringOut;

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

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

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

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

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

export interface DocumentsArgs extends core.SchemaArgs {
  inputFormat?: string | core.StringOut;

  s3Uri: string | core.StringOut;

  testS3Uri?: string | core.StringOut;
}

export class Documents extends core.Schema<DocumentsArgs> {
  @core.attr(String)
  public inputFormat?: string | core.StringOut;

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

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

export interface EntityListArgs extends core.SchemaArgs {
  s3Uri: string | core.StringOut;
}

export class EntityList extends core.Schema<EntityListArgs> {
  @core.attr(String)
  public s3Uri!: string | core.StringOut;
}

export interface InputDataConfigArgs extends core.SchemaArgs {
  annotations?: Annotations;

  augmentedManifests?:
    | core.Array<AugmentedManifests>
    | core.ArrayOut<AugmentedManifests>;

  dataFormat?: string | core.StringOut;

  documents?: Documents;

  entityList?: EntityList;

  entityTypes: core.Array<EntityTypes> | core.ArrayOut<EntityTypes>;
}

export class InputDataConfig extends core.Schema<InputDataConfigArgs> {
  @core.attr(Annotations)
  public annotations?: Annotations;

  @core.attr(AugmentedManifests, { kind: "array" })
  public augmentedManifests?:
    | core.Array<AugmentedManifests>
    | core.ArrayOut<AugmentedManifests>;

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

  @core.attr(Documents)
  public documents?: Documents;

  @core.attr(EntityList)
  public entityList?: EntityList;

  @core.attr(EntityTypes, { kind: "array" })
  public entityTypes!: core.Array<EntityTypes> | core.ArrayOut<EntityTypes>;
}

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

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

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

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

export interface EntityRecognizerArgs extends core.ResourceArgs {
  dataAccessRoleArn: string | core.StringOut;

  inputDataConfig: InputDataConfig;

  languageCode: string | core.StringOut;

  modelKmsKeyId?: string | core.StringOut;

  name: string | core.StringOut;

  tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

  versionName?: string | core.StringOut;

  versionNamePrefix?: string | core.StringOut;

  volumeKmsKeyId?: string | core.StringOut;

  vpcConfig?: VpcConfig;
}

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

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

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

  @core.attr(InputDataConfig)
  public inputDataConfig!: InputDataConfig;

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

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

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

  @core.attr(String, { kind: "map" })
  public tags?: core.Map<string, string> | core.MapOut<core.StringOut>;

  @core.attr(String, { computed: true, kind: "map" })
  public tagsAll?: core.Map<string, string> | core.MapOut<core.StringOut>;

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

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

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

  @core.attr(VpcConfig)
  public vpcConfig?: VpcConfig;

  constructor(name: string, args?: EntityRecognizerArgs) {
    super(name, "aws_comprehend_entity_recognizer", args);
  }

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