// Copyright 2021 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.ads.googleads.v8.common;

import "google/ads/googleads/v8/common/criteria.proto";
import "google/ads/googleads/v8/enums/ad_destination_type.proto";
import "google/ads/googleads/v8/enums/ad_network_type.proto";
import "google/ads/googleads/v8/enums/budget_campaign_association_status.proto";
import "google/ads/googleads/v8/enums/click_type.proto";
import "google/ads/googleads/v8/enums/conversion_action_category.proto";
import "google/ads/googleads/v8/enums/conversion_attribution_event_type.proto";
import "google/ads/googleads/v8/enums/conversion_lag_bucket.proto";
import "google/ads/googleads/v8/enums/conversion_or_adjustment_lag_bucket.proto";
import "google/ads/googleads/v8/enums/day_of_week.proto";
import "google/ads/googleads/v8/enums/device.proto";
import "google/ads/googleads/v8/enums/external_conversion_source.proto";
import "google/ads/googleads/v8/enums/hotel_date_selection_type.proto";
import "google/ads/googleads/v8/enums/hotel_price_bucket.proto";
import "google/ads/googleads/v8/enums/hotel_rate_type.proto";
import "google/ads/googleads/v8/enums/month_of_year.proto";
import "google/ads/googleads/v8/enums/placeholder_type.proto";
import "google/ads/googleads/v8/enums/product_channel.proto";
import "google/ads/googleads/v8/enums/product_channel_exclusivity.proto";
import "google/ads/googleads/v8/enums/product_condition.proto";
import "google/ads/googleads/v8/enums/recommendation_type.proto";
import "google/ads/googleads/v8/enums/search_engine_results_page_type.proto";
import "google/ads/googleads/v8/enums/search_term_match_type.proto";
import "google/ads/googleads/v8/enums/slot.proto";
import "google/api/annotations.proto";

option csharp_namespace = "Google.Ads.GoogleAds.V8.Common";
option go_package = "google.golang.org/genproto/googleapis/ads/googleads/v8/common;common";
option java_multiple_files = true;
option java_outer_classname = "SegmentsProto";
option java_package = "com.google.ads.googleads.v8.common";
option objc_class_prefix = "GAA";
option php_namespace = "Google\\Ads\\GoogleAds\\V8\\Common";
option ruby_package = "Google::Ads::GoogleAds::V8::Common";

// Proto file describing segment only fields.

// Segment only fields.
message Segments {
  // Ad Destination type.
  google.ads.googleads.v8.enums.AdDestinationTypeEnum.AdDestinationType ad_destination_type = 136;

  // Ad network type.
  google.ads.googleads.v8.enums.AdNetworkTypeEnum.AdNetworkType ad_network_type = 3;

  // Budget campaign association status.
  BudgetCampaignAssociationStatus budget_campaign_association_status = 134;

  // Click type.
  google.ads.googleads.v8.enums.ClickTypeEnum.ClickType click_type = 26;

  // Resource name of the conversion action.
  optional string conversion_action = 113;

  // Conversion action category.
  google.ads.googleads.v8.enums.ConversionActionCategoryEnum.ConversionActionCategory conversion_action_category = 53;

  // Conversion action name.
  optional string conversion_action_name = 114;

  // This segments your conversion columns by the original conversion and
  // conversion value vs. the delta if conversions were adjusted. False row has
  // the data as originally stated; While true row has the delta between data
  // now and the data as originally stated. Summing the two together results
  // post-adjustment data.
  optional bool conversion_adjustment = 115;

  // Conversion attribution event type.
  google.ads.googleads.v8.enums.ConversionAttributionEventTypeEnum.ConversionAttributionEventType conversion_attribution_event_type = 2;

  // An enum value representing the number of days between the impression and
  // the conversion.
  google.ads.googleads.v8.enums.ConversionLagBucketEnum.ConversionLagBucket conversion_lag_bucket = 50;

  // An enum value representing the number of days between the impression and
  // the conversion or between the impression and adjustments to the conversion.
  google.ads.googleads.v8.enums.ConversionOrAdjustmentLagBucketEnum.ConversionOrAdjustmentLagBucket conversion_or_adjustment_lag_bucket = 51;

  // Date to which metrics apply.
  // yyyy-MM-dd format, e.g., 2018-04-17.
  optional string date = 79;

  // Day of the week, e.g., MONDAY.
  google.ads.googleads.v8.enums.DayOfWeekEnum.DayOfWeek day_of_week = 5;

  // Device to which metrics apply.
  google.ads.googleads.v8.enums.DeviceEnum.Device device = 1;

  // External conversion source.
  google.ads.googleads.v8.enums.ExternalConversionSourceEnum.ExternalConversionSource external_conversion_source = 55;

  // Resource name of the geo target constant that represents an airport.
  optional string geo_target_airport = 116;

  // Resource name of the geo target constant that represents a canton.
  optional string geo_target_canton = 117;

  // Resource name of the geo target constant that represents a city.
  optional string geo_target_city = 118;

  // Resource name of the geo target constant that represents a country.
  optional string geo_target_country = 119;

  // Resource name of the geo target constant that represents a county.
  optional string geo_target_county = 120;

  // Resource name of the geo target constant that represents a district.
  optional string geo_target_district = 121;

  // Resource name of the geo target constant that represents a metro.
  optional string geo_target_metro = 122;

  // Resource name of the geo target constant that represents the most
  // specific location.
  optional string geo_target_most_specific_location = 123;

  // Resource name of the geo target constant that represents a postal code.
  optional string geo_target_postal_code = 124;

  // Resource name of the geo target constant that represents a province.
  optional string geo_target_province = 125;

  // Resource name of the geo target constant that represents a region.
  optional string geo_target_region = 126;

  // Resource name of the geo target constant that represents a state.
  optional string geo_target_state = 127;

  // Hotel booking window in days.
  optional int64 hotel_booking_window_days = 135;

  // Hotel center ID.
  optional int64 hotel_center_id = 80;

  // Hotel check-in date. Formatted as yyyy-MM-dd.
  optional string hotel_check_in_date = 81;

  // Hotel check-in day of week.
  google.ads.googleads.v8.enums.DayOfWeekEnum.DayOfWeek hotel_check_in_day_of_week = 9;

  // Hotel city.
  optional string hotel_city = 82;

  // Hotel class.
  optional int32 hotel_class = 83;

  // Hotel country.
  optional string hotel_country = 84;

  // Hotel date selection type.
  google.ads.googleads.v8.enums.HotelDateSelectionTypeEnum.HotelDateSelectionType hotel_date_selection_type = 13;

  // Hotel length of stay.
  optional int32 hotel_length_of_stay = 85;

  // Hotel rate rule ID.
  optional string hotel_rate_rule_id = 86;

  // Hotel rate type.
  google.ads.googleads.v8.enums.HotelRateTypeEnum.HotelRateType hotel_rate_type = 74;

  // Hotel price bucket.
  google.ads.googleads.v8.enums.HotelPriceBucketEnum.HotelPriceBucket hotel_price_bucket = 78;

  // Hotel state.
  optional string hotel_state = 87;

  // Hour of day as a number between 0 and 23, inclusive.
  optional int32 hour = 88;

  // Only used with feed item metrics.
  // Indicates whether the interaction metrics occurred on the feed item itself
  // or a different extension or ad unit.
  optional bool interaction_on_this_extension = 89;

  // Keyword criterion.
  Keyword keyword = 61;

  // Month as represented by the date of the first day of a month. Formatted as
  // yyyy-MM-dd.
  optional string month = 90;

  // Month of the year, e.g., January.
  google.ads.googleads.v8.enums.MonthOfYearEnum.MonthOfYear month_of_year = 18;

  // Partner hotel ID.
  optional string partner_hotel_id = 91;

  // Placeholder type. This is only used with feed item metrics.
  google.ads.googleads.v8.enums.PlaceholderTypeEnum.PlaceholderType placeholder_type = 20;

  // Aggregator ID of the product.
  optional int64 product_aggregator_id = 132;

  // Bidding category (level 1) of the product.
  optional string product_bidding_category_level1 = 92;

  // Bidding category (level 2) of the product.
  optional string product_bidding_category_level2 = 93;

  // Bidding category (level 3) of the product.
  optional string product_bidding_category_level3 = 94;

  // Bidding category (level 4) of the product.
  optional string product_bidding_category_level4 = 95;

  // Bidding category (level 5) of the product.
  optional string product_bidding_category_level5 = 96;

  // Brand of the product.
  optional string product_brand = 97;

  // Channel of the product.
  google.ads.googleads.v8.enums.ProductChannelEnum.ProductChannel product_channel = 30;

  // Channel exclusivity of the product.
  google.ads.googleads.v8.enums.ProductChannelExclusivityEnum.ProductChannelExclusivity product_channel_exclusivity = 31;

  // Condition of the product.
  google.ads.googleads.v8.enums.ProductConditionEnum.ProductCondition product_condition = 32;

  // Resource name of the geo target constant for the country of sale of the
  // product.
  optional string product_country = 98;

  // Custom attribute 0 of the product.
  optional string product_custom_attribute0 = 99;

  // Custom attribute 1 of the product.
  optional string product_custom_attribute1 = 100;

  // Custom attribute 2 of the product.
  optional string product_custom_attribute2 = 101;

  // Custom attribute 3 of the product.
  optional string product_custom_attribute3 = 102;

  // Custom attribute 4 of the product.
  optional string product_custom_attribute4 = 103;

  // Item ID of the product.
  optional string product_item_id = 104;

  // Resource name of the language constant for the language of the product.
  optional string product_language = 105;

  // Merchant ID of the product.
  optional int64 product_merchant_id = 133;

  // Store ID of the product.
  optional string product_store_id = 106;

  // Title of the product.
  optional string product_title = 107;

  // Type (level 1) of the product.
  optional string product_type_l1 = 108;

  // Type (level 2) of the product.
  optional string product_type_l2 = 109;

  // Type (level 3) of the product.
  optional string product_type_l3 = 110;

  // Type (level 4) of the product.
  optional string product_type_l4 = 111;

  // Type (level 5) of the product.
  optional string product_type_l5 = 112;

  // Quarter as represented by the date of the first day of a quarter.
  // Uses the calendar year for quarters, e.g., the second quarter of 2018
  // starts on 2018-04-01. Formatted as yyyy-MM-dd.
  optional string quarter = 128;

  // Recommendation type.
  google.ads.googleads.v8.enums.RecommendationTypeEnum.RecommendationType recommendation_type = 140;

  // Type of the search engine results page.
  google.ads.googleads.v8.enums.SearchEngineResultsPageTypeEnum.SearchEngineResultsPageType search_engine_results_page_type = 70;

  // Match type of the keyword that triggered the ad, including variants.
  google.ads.googleads.v8.enums.SearchTermMatchTypeEnum.SearchTermMatchType search_term_match_type = 22;

  // Position of the ad.
  google.ads.googleads.v8.enums.SlotEnum.Slot slot = 23;

  // Resource name of the ad group criterion that represents webpage criterion.
  optional string webpage = 129;

  // Week as defined as Monday through Sunday, and represented by the date of
  // Monday. Formatted as yyyy-MM-dd.
  optional string week = 130;

  // Year, formatted as yyyy.
  optional int32 year = 131;

  // iOS Store Kit Ad Network conversion value.
  // Null value means this segment is not applicable, e.g. non-iOS campaign.
  optional int64 sk_ad_network_conversion_value = 137;

  // Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics.
  // Indicates whether the interaction metrics occurred on the asset itself
  // or a different asset or ad unit.
  // Interactions (e.g. clicks) are counted across all the parts of the served
  // ad (e.g. Ad itself and other components like Sitelinks) when they are
  // served together. When interaction_on_this_asset is true, it means the
  // interactions are on this specific asset and when interaction_on_this_asset
  // is false, it means the interactions is not on this specific asset but on
  // other parts of the served ad this asset is served with.
  optional AssetInteractionTarget asset_interaction_target = 139;
}

// A Keyword criterion segment.
message Keyword {
  // The AdGroupCriterion resource name.
  optional string ad_group_criterion = 3;

  // Keyword info.
  KeywordInfo info = 2;
}

// A BudgetCampaignAssociationStatus segment.
message BudgetCampaignAssociationStatus {
  // The campaign resource name.
  optional string campaign = 1;

  // Budget campaign association status.
  google.ads.googleads.v8.enums.BudgetCampaignAssociationStatusEnum.BudgetCampaignAssociationStatus status = 2;
}

// An AssetInteractionTarget segment.
message AssetInteractionTarget {
  // The asset resource name.
  string asset = 1;

  // Only used with CustomerAsset, CampaignAsset and AdGroupAsset metrics.
  // Indicates whether the interaction metrics occurred on the asset itself or a
  // different asset or ad unit.
  bool interaction_on_this_asset = 2;
}
