// Copyright 2020 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.v5.common;

import "google/api/annotations.proto";

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

// Proto file describing simulation points.

// A container for simulation points for simulations of type BID_MODIFIER.
message BidModifierSimulationPointList {
  // Projected metrics for a series of bid modifier amounts.
  repeated BidModifierSimulationPoint points = 1;
}

// A container for simulation points for simulations of type CPC_BID.
message CpcBidSimulationPointList {
  // Projected metrics for a series of CPC bid amounts.
  repeated CpcBidSimulationPoint points = 1;
}

// A container for simulation points for simulations of type CPV_BID.
message CpvBidSimulationPointList {
  // Projected metrics for a series of CPV bid amounts.
  repeated CpvBidSimulationPoint points = 1;
}

// A container for simulation points for simulations of type TARGET_CPA.
message TargetCpaSimulationPointList {
  // Projected metrics for a series of target CPA amounts.
  repeated TargetCpaSimulationPoint points = 1;
}

// A container for simulation points for simulations of type TARGET_ROAS.
message TargetRoasSimulationPointList {
  // Projected metrics for a series of target ROAS amounts.
  repeated TargetRoasSimulationPoint points = 1;
}

// A container for simulation points for simulations of type PERCENT_CPC_BID.
message PercentCpcBidSimulationPointList {
  // Projected metrics for a series of percent CPC bid amounts.
  repeated PercentCpcBidSimulationPoint points = 1;
}

// Projected metrics for a specific bid modifier amount.
message BidModifierSimulationPoint {
  // The simulated bid modifier upon which projected metrics are based.
  optional double bid_modifier = 15;

  // Projected number of biddable conversions.
  // Only search advertising channel type supports this field.
  optional double biddable_conversions = 16;

  // Projected total value of biddable conversions.
  // Only search advertising channel type supports this field.
  optional double biddable_conversions_value = 17;

  // Projected number of clicks.
  optional int64 clicks = 18;

  // Projected cost in micros.
  optional int64 cost_micros = 19;

  // Projected number of impressions.
  optional int64 impressions = 20;

  // Projected number of top slot impressions.
  // Only search advertising channel type supports this field.
  optional int64 top_slot_impressions = 21;

  // Projected number of biddable conversions for the parent resource.
  // Only search advertising channel type supports this field.
  optional double parent_biddable_conversions = 22;

  // Projected total value of biddable conversions for the parent resource.
  // Only search advertising channel type supports this field.
  optional double parent_biddable_conversions_value = 23;

  // Projected number of clicks for the parent resource.
  optional int64 parent_clicks = 24;

  // Projected cost in micros for the parent resource.
  optional int64 parent_cost_micros = 25;

  // Projected number of impressions for the parent resource.
  optional int64 parent_impressions = 26;

  // Projected number of top slot impressions for the parent resource.
  // Only search advertising channel type supports this field.
  optional int64 parent_top_slot_impressions = 27;

  // Projected minimum daily budget that must be available to the parent
  // resource to realize this simulation.
  optional int64 parent_required_budget_micros = 28;
}

// Projected metrics for a specific CPC bid amount.
message CpcBidSimulationPoint {
  // The simulated CPC bid upon which projected metrics are based.
  optional int64 cpc_bid_micros = 8;

  // Projected number of biddable conversions.
  optional double biddable_conversions = 9;

  // Projected total value of biddable conversions.
  optional double biddable_conversions_value = 10;

  // Projected number of clicks.
  optional int64 clicks = 11;

  // Projected cost in micros.
  optional int64 cost_micros = 12;

  // Projected number of impressions.
  optional int64 impressions = 13;

  // Projected number of top slot impressions.
  // Only search advertising channel type supports this field.
  optional int64 top_slot_impressions = 14;
}

// Projected metrics for a specific CPV bid amount.
message CpvBidSimulationPoint {
  // The simulated CPV bid upon which projected metrics are based.
  optional int64 cpv_bid_micros = 5;

  // Projected cost in micros.
  optional int64 cost_micros = 6;

  // Projected number of impressions.
  optional int64 impressions = 7;

  // Projected number of views.
  optional int64 views = 8;
}

// Projected metrics for a specific target CPA amount.
message TargetCpaSimulationPoint {
  // The simulated target CPA upon which projected metrics are based.
  optional int64 target_cpa_micros = 8;

  // Projected number of biddable conversions.
  optional double biddable_conversions = 9;

  // Projected total value of biddable conversions.
  optional double biddable_conversions_value = 10;

  // Projected number of clicks.
  optional int64 clicks = 11;

  // Projected cost in micros.
  optional int64 cost_micros = 12;

  // Projected number of impressions.
  optional int64 impressions = 13;

  // Projected number of top slot impressions.
  // Only search advertising channel type supports this field.
  optional int64 top_slot_impressions = 14;
}

// Projected metrics for a specific target ROAS amount.
message TargetRoasSimulationPoint {
  // The simulated target ROAS upon which projected metrics are based.
  optional double target_roas = 8;

  // Projected number of biddable conversions.
  optional double biddable_conversions = 9;

  // Projected total value of biddable conversions.
  optional double biddable_conversions_value = 10;

  // Projected number of clicks.
  optional int64 clicks = 11;

  // Projected cost in micros.
  optional int64 cost_micros = 12;

  // Projected number of impressions.
  optional int64 impressions = 13;

  // Projected number of top slot impressions.
  // Only Search advertising channel type supports this field.
  optional int64 top_slot_impressions = 14;
}

// Projected metrics for a specific percent CPC amount. Only Hotel advertising
// channel type supports this field.
message PercentCpcBidSimulationPoint {
  // The simulated percent CPC upon which projected metrics are based. Percent
  // CPC expressed as fraction of the advertised price for some good or service.
  // The value stored here is 1,000,000 * [fraction].
  optional int64 percent_cpc_bid_micros = 1;

  // Projected number of biddable conversions.
  optional double biddable_conversions = 2;

  // Projected total value of biddable conversions in local currency.
  optional double biddable_conversions_value = 3;

  // Projected number of clicks.
  optional int64 clicks = 4;

  // Projected cost in micros.
  optional int64 cost_micros = 5;

  // Projected number of impressions.
  optional int64 impressions = 6;

  // Projected number of top slot impressions.
  optional int64 top_slot_impressions = 7;
}
