// Copyright 2024 Google LLC
//
// 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.

syntax = "proto3";

package google.cloud.discoveryengine.v1beta;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/cloud/discoveryengine/v1beta/common.proto";
import "google/cloud/discoveryengine/v1beta/document_processing_config.proto";
import "google/cloud/discoveryengine/v1beta/schema.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Cloud.DiscoveryEngine.V1Beta";
option go_package = "cloud.google.com/go/discoveryengine/apiv1beta/discoveryenginepb;discoveryenginepb";
option java_multiple_files = true;
option java_outer_classname = "DataStoreProto";
option java_package = "com.google.cloud.discoveryengine.v1beta";
option objc_class_prefix = "DISCOVERYENGINE";
option php_namespace = "Google\\Cloud\\DiscoveryEngine\\V1beta";
option ruby_package = "Google::Cloud::DiscoveryEngine::V1beta";

// DataStore captures global settings and configs at the DataStore level.
message DataStore {
  option (google.api.resource) = {
    type: "discoveryengine.googleapis.com/DataStore"
    pattern: "projects/{project}/locations/{location}/dataStores/{data_store}"
    pattern: "projects/{project}/locations/{location}/collections/{collection}/dataStores/{data_store}"
  };

  // Content config of the data store.
  enum ContentConfig {
    // Default value.
    CONTENT_CONFIG_UNSPECIFIED = 0;

    // Only contains documents without any
    // [Document.content][google.cloud.discoveryengine.v1beta.Document.content].
    NO_CONTENT = 1;

    // Only contains documents with
    // [Document.content][google.cloud.discoveryengine.v1beta.Document.content].
    CONTENT_REQUIRED = 2;

    // The data store is used for public website search.
    PUBLIC_WEBSITE = 3;
  }

  // Immutable. The full resource name of the data store.
  // Format:
  // `projects/{project}/locations/{location}/collections/{collection_id}/dataStores/{data_store_id}`.
  //
  // This field must be a UTF-8 encoded string with a length limit of 1024
  // characters.
  string name = 1 [(google.api.field_behavior) = IMMUTABLE];

  // Required. The data store display name.
  //
  // This field must be a UTF-8 encoded string with a length limit of 128
  // characters. Otherwise, an INVALID_ARGUMENT error is returned.
  string display_name = 2 [(google.api.field_behavior) = REQUIRED];

  // Immutable. The industry vertical that the data store registers.
  IndustryVertical industry_vertical = 3
      [(google.api.field_behavior) = IMMUTABLE];

  // The solutions that the data store enrolls. Available solutions for each
  // [industry_vertical][google.cloud.discoveryengine.v1beta.DataStore.industry_vertical]:
  //
  // * `MEDIA`: `SOLUTION_TYPE_RECOMMENDATION` and `SOLUTION_TYPE_SEARCH`.
  // * `SITE_SEARCH`: `SOLUTION_TYPE_SEARCH` is automatically enrolled. Other
  //   solutions cannot be enrolled.
  repeated SolutionType solution_types = 5;

  // Output only. The id of the default
  // [Schema][google.cloud.discoveryengine.v1beta.Schema] asscociated to this
  // data store.
  string default_schema_id = 7 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Immutable. The content config of the data store. If this field is unset,
  // the server behavior defaults to
  // [ContentConfig.NO_CONTENT][google.cloud.discoveryengine.v1beta.DataStore.ContentConfig.NO_CONTENT].
  ContentConfig content_config = 6 [(google.api.field_behavior) = IMMUTABLE];

  // Output only. Timestamp the
  // [DataStore][google.cloud.discoveryengine.v1beta.DataStore] was created at.
  google.protobuf.Timestamp create_time = 4
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Language info for DataStore.
  LanguageInfo language_info = 14;

  // Configuration for Document understanding and enrichment.
  DocumentProcessingConfig document_processing_config = 27;

  // The start schema to use for this
  // [DataStore][google.cloud.discoveryengine.v1beta.DataStore] when
  // provisioning it. If unset, a default vertical specialized schema will be
  // used.
  //
  // This field is only used by [CreateDataStore][] API, and will be ignored if
  // used in other APIs. This field will be omitted from all API responses
  // including [CreateDataStore][] API. To retrieve a schema of a
  // [DataStore][google.cloud.discoveryengine.v1beta.DataStore], use
  // [SchemaService.GetSchema][google.cloud.discoveryengine.v1beta.SchemaService.GetSchema]
  // API instead.
  //
  // The provided schema will be validated against certain rules on schema.
  // Learn more from [this
  // doc](https://cloud.google.com/generative-ai-app-builder/docs/provide-schema).
  Schema starting_schema = 28;
}

// Language info for DataStore.
message LanguageInfo {
  // The language code for the DataStore.
  string language_code = 1;

  // Output only. This is the normalized form of language_code.
  // E.g.: language_code of `en-GB`, `en_GB`, `en-UK` or `en-gb`
  // will have normalized_language_code of `en-GB`.
  string normalized_language_code = 2
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Language part of normalized_language_code.
  // E.g.: `en-US` -> `en`, `zh-Hans-HK` -> `zh`, `en` -> `en`.
  string language = 3 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Region part of normalized_language_code, if present.
  // E.g.: `en-US` -> `US`, `zh-Hans-HK` -> `HK`, `en` -> ``.
  string region = 4 [(google.api.field_behavior) = OUTPUT_ONLY];
}
