// 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.maps.places.v1;

import "google/maps/places/v1/photo.proto";
import "google/maps/places/v1/review.proto";

option cc_enable_arenas = true;
option csharp_namespace = "Google.Maps.Places.V1";
option go_package = "cloud.google.com/go/maps/places/apiv1/placespb;placespb";
option java_multiple_files = true;
option java_outer_classname = "ContextualContentProto";
option java_package = "com.google.maps.places.v1";
option objc_class_prefix = "GMPSV1";
option php_namespace = "Google\\Maps\\Places\\V1";

// Experimental: See
// https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
// for more details.
//
// Content that is contextual to the place query.
message ContextualContent {
  // Experimental: See
  // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
  // for more details.
  //
  // Justifications for the place. Justifications answers the question of why a
  // place could interest an end user.
  message Justification {
    // Experimental: See
    // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
    // for more details.
    //
    // User review justifications. This highlights a section of the user review
    // that would interest an end user. For instance, if the search query is
    // "firewood pizza", the review justification highlights the text relevant
    // to the search query.
    message ReviewJustification {
      // The text highlighted by the justification. This is a subset of the
      // review itself. The exact word to highlight is marked by the
      // HighlightedTextRange. There could be several words in the text being
      // highlighted.
      message HighlightedText {
        // The range of highlighted text.
        message HighlightedTextRange {
          int32 start_index = 1;

          int32 end_index = 2;
        }

        string text = 1;

        // The list of the ranges of the highlighted text.
        repeated HighlightedTextRange highlighted_text_ranges = 2;
      }

      HighlightedText highlighted_text = 1;

      // The review that the highlighted text is generated from.
      Review review = 2;
    }

    // Experimental: See
    // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
    // for more details.
    // BusinessAvailabilityAttributes justifications. This shows some attributes
    // a business has that could interest an end user.
    message BusinessAvailabilityAttributesJustification {
      // If a place provides takeout.
      bool takeout = 1;

      // If a place provides delivery.
      bool delivery = 2;

      // If a place provides dine-in.
      bool dine_in = 3;
    }

    oneof justification {
      // Experimental: See
      // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
      // for more details.
      ReviewJustification review_justification = 1;

      // Experimental: See
      // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
      // for more details.
      BusinessAvailabilityAttributesJustification
          business_availability_attributes_justification = 2;
    }
  }

  // List of reviews about this place, contexual to the place query.
  repeated Review reviews = 1;

  // Information (including references) about photos of this place, contexual to
  // the place query.
  repeated Photo photos = 2;

  // Experimental: See
  // https://developers.google.com/maps/documentation/places/web-service/experimental/places-generative
  // for more details.
  //
  // Justifications for the place.
  repeated Justification justifications = 3;
}
