/*
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
 * in compliance with the License. You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software distributed under the License
 * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
 * or implied. See the License for the specific language governing permissions and limitations under
 * the License.
 */
/*
 * This code was generated by https://github.com/googleapis/google-api-java-client-services/
 * Modify at your own risk.
 */

package com.google.api.services.dialogflow.v3beta1.model;

/**
 * Represents the settings related to security issues, such as data redaction and data retention. It
 * may take hours for updates on the settings to propagate to all the related components and take
 * effect.
 *
 * <p> This is the Java data model class that specifies how to parse/serialize into the JSON that is
 * transmitted over HTTP when working with the Dialogflow API. For a detailed explanation see:
 * <a href="https://developers.google.com/api-client-library/java/google-http-java-client/json">https://developers.google.com/api-client-library/java/google-http-java-client/json</a>
 * </p>
 *
 * @author Google, Inc.
 */
@SuppressWarnings("javadoc")
public final class GoogleCloudDialogflowCxV3beta1SecuritySettings extends com.google.api.client.json.GenericJson {

  /**
   * Controls audio export settings for post-conversation analytics when ingesting audio to
   * conversations via Participants.AnalyzeContent or Participants.StreamingAnalyzeContent. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION or audio_export_settings.gcs_bucket is
   * empty, audio export is disabled. If audio export is enabled, audio is recorded and saved to
   * audio_export_settings.gcs_bucket, subject to retention policy of
   * audio_export_settings.gcs_bucket. This setting won't effect audio input for implicit sessions
   * via Sessions.DetectIntent or Sessions.StreamingDetectIntent.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDialogflowCxV3beta1SecuritySettingsAudioExportSettings audioExportSettings;

  /**
   * [DLP](https://cloud.google.com/dlp/docs) deidentify template name. Use this template to define
   * de-identification configuration for the content. The `DLP De-identify Templates Reader` role is
   * needed on the Dialogflow service identity service account (has the form `service-PROJECT_NUMBER
   * @gcp-sa-dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, Dialogflow
   * replaces sensitive info with `[redacted]` text. The template name will have one of the
   * following formats: `projects//locations//deidentifyTemplates/` OR
   * `organizations//locations//deidentifyTemplates/` Note: `deidentify_template` must be located in
   * the same region as the `SecuritySettings`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String deidentifyTemplate;

  /**
   * Required. The human-readable name of the security settings, unique within the location.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String displayName;

  /**
   * Controls conversation exporting settings to Insights after conversation is completed. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION, Insights export is disabled no matter
   * what you configure here.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private GoogleCloudDialogflowCxV3beta1SecuritySettingsInsightsExportSettings insightsExportSettings;

  /**
   * [DLP](https://cloud.google.com/dlp/docs) inspect template name. Use this template to define
   * inspect base settings. The `DLP Inspect Templates Reader` role is needed on the Dialogflow
   * service identity service account (has the form `service-PROJECT_NUMBER@gcp-sa-
   * dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, we use the default DLP
   * inspect config. The template name will have one of the following formats:
   * `projects//locations//inspectTemplates/` OR `organizations//locations//inspectTemplates/` Note:
   * `inspect_template` must be located in the same region as the `SecuritySettings`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String inspectTemplate;

  /**
   * Resource name of the settings. Required for the SecuritySettingsService.UpdateSecuritySettings
   * method. SecuritySettingsService.CreateSecuritySettings populates the name automatically.
   * Format: `projects//locations//securitySettings/`.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String name;

  /**
   * List of types of data to remove when retention settings triggers purge.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.util.List<java.lang.String> purgeDataTypes;

  /**
   * Defines the data for which Dialogflow applies redaction. Dialogflow does not redact data that
   * it does not have access to – for example, Cloud logging.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String redactionScope;

  /**
   * Strategy that defines how we do redaction.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.String redactionStrategy;

  /**
   * Retains data in interaction logging for the specified number of days. This does not apply to
   * Cloud logging, which is owned by the user - not Dialogflow. User must set a value lower than
   * Dialogflow's default 365d TTL. Setting a value higher than that has no effect. A missing value
   * or setting to 0 also means we use Dialogflow's default TTL. Note: Interaction logging is a
   * limited access feature. Talk to your Google representative to check availability for you.
   * The value may be {@code null}.
   */
  @com.google.api.client.util.Key
  private java.lang.Integer retentionWindowDays;

  /**
   * Controls audio export settings for post-conversation analytics when ingesting audio to
   * conversations via Participants.AnalyzeContent or Participants.StreamingAnalyzeContent. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION or audio_export_settings.gcs_bucket is
   * empty, audio export is disabled. If audio export is enabled, audio is recorded and saved to
   * audio_export_settings.gcs_bucket, subject to retention policy of
   * audio_export_settings.gcs_bucket. This setting won't effect audio input for implicit sessions
   * via Sessions.DetectIntent or Sessions.StreamingDetectIntent.
   * @return value or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettingsAudioExportSettings getAudioExportSettings() {
    return audioExportSettings;
  }

  /**
   * Controls audio export settings for post-conversation analytics when ingesting audio to
   * conversations via Participants.AnalyzeContent or Participants.StreamingAnalyzeContent. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION or audio_export_settings.gcs_bucket is
   * empty, audio export is disabled. If audio export is enabled, audio is recorded and saved to
   * audio_export_settings.gcs_bucket, subject to retention policy of
   * audio_export_settings.gcs_bucket. This setting won't effect audio input for implicit sessions
   * via Sessions.DetectIntent or Sessions.StreamingDetectIntent.
   * @param audioExportSettings audioExportSettings or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setAudioExportSettings(GoogleCloudDialogflowCxV3beta1SecuritySettingsAudioExportSettings audioExportSettings) {
    this.audioExportSettings = audioExportSettings;
    return this;
  }

  /**
   * [DLP](https://cloud.google.com/dlp/docs) deidentify template name. Use this template to define
   * de-identification configuration for the content. The `DLP De-identify Templates Reader` role is
   * needed on the Dialogflow service identity service account (has the form `service-PROJECT_NUMBER
   * @gcp-sa-dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, Dialogflow
   * replaces sensitive info with `[redacted]` text. The template name will have one of the
   * following formats: `projects//locations//deidentifyTemplates/` OR
   * `organizations//locations//deidentifyTemplates/` Note: `deidentify_template` must be located in
   * the same region as the `SecuritySettings`.
   * @return value or {@code null} for none
   */
  public java.lang.String getDeidentifyTemplate() {
    return deidentifyTemplate;
  }

  /**
   * [DLP](https://cloud.google.com/dlp/docs) deidentify template name. Use this template to define
   * de-identification configuration for the content. The `DLP De-identify Templates Reader` role is
   * needed on the Dialogflow service identity service account (has the form `service-PROJECT_NUMBER
   * @gcp-sa-dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, Dialogflow
   * replaces sensitive info with `[redacted]` text. The template name will have one of the
   * following formats: `projects//locations//deidentifyTemplates/` OR
   * `organizations//locations//deidentifyTemplates/` Note: `deidentify_template` must be located in
   * the same region as the `SecuritySettings`.
   * @param deidentifyTemplate deidentifyTemplate or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setDeidentifyTemplate(java.lang.String deidentifyTemplate) {
    this.deidentifyTemplate = deidentifyTemplate;
    return this;
  }

  /**
   * Required. The human-readable name of the security settings, unique within the location.
   * @return value or {@code null} for none
   */
  public java.lang.String getDisplayName() {
    return displayName;
  }

  /**
   * Required. The human-readable name of the security settings, unique within the location.
   * @param displayName displayName or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setDisplayName(java.lang.String displayName) {
    this.displayName = displayName;
    return this;
  }

  /**
   * Controls conversation exporting settings to Insights after conversation is completed. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION, Insights export is disabled no matter
   * what you configure here.
   * @return value or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettingsInsightsExportSettings getInsightsExportSettings() {
    return insightsExportSettings;
  }

  /**
   * Controls conversation exporting settings to Insights after conversation is completed. If
   * retention_strategy is set to REMOVE_AFTER_CONVERSATION, Insights export is disabled no matter
   * what you configure here.
   * @param insightsExportSettings insightsExportSettings or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setInsightsExportSettings(GoogleCloudDialogflowCxV3beta1SecuritySettingsInsightsExportSettings insightsExportSettings) {
    this.insightsExportSettings = insightsExportSettings;
    return this;
  }

  /**
   * [DLP](https://cloud.google.com/dlp/docs) inspect template name. Use this template to define
   * inspect base settings. The `DLP Inspect Templates Reader` role is needed on the Dialogflow
   * service identity service account (has the form `service-PROJECT_NUMBER@gcp-sa-
   * dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, we use the default DLP
   * inspect config. The template name will have one of the following formats:
   * `projects//locations//inspectTemplates/` OR `organizations//locations//inspectTemplates/` Note:
   * `inspect_template` must be located in the same region as the `SecuritySettings`.
   * @return value or {@code null} for none
   */
  public java.lang.String getInspectTemplate() {
    return inspectTemplate;
  }

  /**
   * [DLP](https://cloud.google.com/dlp/docs) inspect template name. Use this template to define
   * inspect base settings. The `DLP Inspect Templates Reader` role is needed on the Dialogflow
   * service identity service account (has the form `service-PROJECT_NUMBER@gcp-sa-
   * dialogflow.iam.gserviceaccount.com`) for your agent's project. If empty, we use the default DLP
   * inspect config. The template name will have one of the following formats:
   * `projects//locations//inspectTemplates/` OR `organizations//locations//inspectTemplates/` Note:
   * `inspect_template` must be located in the same region as the `SecuritySettings`.
   * @param inspectTemplate inspectTemplate or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setInspectTemplate(java.lang.String inspectTemplate) {
    this.inspectTemplate = inspectTemplate;
    return this;
  }

  /**
   * Resource name of the settings. Required for the SecuritySettingsService.UpdateSecuritySettings
   * method. SecuritySettingsService.CreateSecuritySettings populates the name automatically.
   * Format: `projects//locations//securitySettings/`.
   * @return value or {@code null} for none
   */
  public java.lang.String getName() {
    return name;
  }

  /**
   * Resource name of the settings. Required for the SecuritySettingsService.UpdateSecuritySettings
   * method. SecuritySettingsService.CreateSecuritySettings populates the name automatically.
   * Format: `projects//locations//securitySettings/`.
   * @param name name or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setName(java.lang.String name) {
    this.name = name;
    return this;
  }

  /**
   * List of types of data to remove when retention settings triggers purge.
   * @return value or {@code null} for none
   */
  public java.util.List<java.lang.String> getPurgeDataTypes() {
    return purgeDataTypes;
  }

  /**
   * List of types of data to remove when retention settings triggers purge.
   * @param purgeDataTypes purgeDataTypes or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setPurgeDataTypes(java.util.List<java.lang.String> purgeDataTypes) {
    this.purgeDataTypes = purgeDataTypes;
    return this;
  }

  /**
   * Defines the data for which Dialogflow applies redaction. Dialogflow does not redact data that
   * it does not have access to – for example, Cloud logging.
   * @return value or {@code null} for none
   */
  public java.lang.String getRedactionScope() {
    return redactionScope;
  }

  /**
   * Defines the data for which Dialogflow applies redaction. Dialogflow does not redact data that
   * it does not have access to – for example, Cloud logging.
   * @param redactionScope redactionScope or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setRedactionScope(java.lang.String redactionScope) {
    this.redactionScope = redactionScope;
    return this;
  }

  /**
   * Strategy that defines how we do redaction.
   * @return value or {@code null} for none
   */
  public java.lang.String getRedactionStrategy() {
    return redactionStrategy;
  }

  /**
   * Strategy that defines how we do redaction.
   * @param redactionStrategy redactionStrategy or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setRedactionStrategy(java.lang.String redactionStrategy) {
    this.redactionStrategy = redactionStrategy;
    return this;
  }

  /**
   * Retains data in interaction logging for the specified number of days. This does not apply to
   * Cloud logging, which is owned by the user - not Dialogflow. User must set a value lower than
   * Dialogflow's default 365d TTL. Setting a value higher than that has no effect. A missing value
   * or setting to 0 also means we use Dialogflow's default TTL. Note: Interaction logging is a
   * limited access feature. Talk to your Google representative to check availability for you.
   * @return value or {@code null} for none
   */
  public java.lang.Integer getRetentionWindowDays() {
    return retentionWindowDays;
  }

  /**
   * Retains data in interaction logging for the specified number of days. This does not apply to
   * Cloud logging, which is owned by the user - not Dialogflow. User must set a value lower than
   * Dialogflow's default 365d TTL. Setting a value higher than that has no effect. A missing value
   * or setting to 0 also means we use Dialogflow's default TTL. Note: Interaction logging is a
   * limited access feature. Talk to your Google representative to check availability for you.
   * @param retentionWindowDays retentionWindowDays or {@code null} for none
   */
  public GoogleCloudDialogflowCxV3beta1SecuritySettings setRetentionWindowDays(java.lang.Integer retentionWindowDays) {
    this.retentionWindowDays = retentionWindowDays;
    return this;
  }

  @Override
  public GoogleCloudDialogflowCxV3beta1SecuritySettings set(String fieldName, Object value) {
    return (GoogleCloudDialogflowCxV3beta1SecuritySettings) super.set(fieldName, value);
  }

  @Override
  public GoogleCloudDialogflowCxV3beta1SecuritySettings clone() {
    return (GoogleCloudDialogflowCxV3beta1SecuritySettings) super.clone();
  }

}
