<?php
// Generated by the protocol buffer compiler.  DO NOT EDIT!
// source: google/ads/googleads/v23/services/recommendation_service.proto

namespace Google\Ads\GoogleAds\V23\Services;

use Google\Protobuf\Internal\GPBType;
use Google\Protobuf\Internal\GPBUtil;
use Google\Protobuf\RepeatedField;

/**
 * Request message for
 * [RecommendationService.GenerateRecommendations][google.ads.googleads.v23.services.RecommendationService.GenerateRecommendations].
 *
 * Generated from protobuf message <code>google.ads.googleads.v23.services.GenerateRecommendationsRequest</code>
 */
class GenerateRecommendationsRequest extends \Google\Protobuf\Internal\Message
{
    /**
     * Required. The ID of the customer generating recommendations.
     *
     * Generated from protobuf field <code>string customer_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    protected $customer_id = '';
    /**
     * Required. List of eligible recommendation_types to generate. If the
     * uploaded criteria isn't sufficient to make a recommendation, or the
     * campaign is already in the recommended state, no recommendation will be
     * returned for that type. Generally, a recommendation is returned if all
     * required fields for that recommendation_type are uploaded, but there are
     * cases where this is still not sufficient.
     * The following recommendation_types are supported for recommendation
     * generation:
     * CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
     * MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
     * SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN,
     * TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.enums.RecommendationTypeEnum.RecommendationType recommendation_types = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    private $recommendation_types;
    /**
     * Required. Advertising channel type of the campaign.
     * The following advertising_channel_types are supported for recommendation
     * generation:
     * PERFORMANCE_MAX and SEARCH
     *
     * Generated from protobuf field <code>.google.ads.googleads.v23.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     */
    protected $advertising_channel_type = 0;
    /**
     * Optional. Number of sitelinks on the campaign.
     * This field is necessary for the following recommendation_types:
     * SITELINK_ASSET
     *
     * Generated from protobuf field <code>optional int32 campaign_sitelink_count = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $campaign_sitelink_count = null;
    /**
     * Optional. Current conversion tracking status.
     * This field is necessary for the following recommendation_types:
     * MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.enums.ConversionTrackingStatusEnum.ConversionTrackingStatus conversion_tracking_status = 5 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $conversion_tracking_status = null;
    /**
     * Optional. Current bidding information of the campaign.
     * This field is necessary for the following recommendation_types:
     * CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BiddingInfo bidding_info = 6 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $bidding_info = null;
    /**
     * Optional. Current AdGroup Information.
     * Supports information from a single AdGroup.
     * This field is optional for the following recommendation_types:
     * KEYWORD
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AdGroupInfo ad_group_info = 7 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $ad_group_info;
    /**
     * Optional. Seed information for Keywords.
     * This field is necessary for the following recommendation_types:
     * KEYWORD
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.SeedInfo seed_info = 8 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $seed_info = null;
    /**
     * Optional. Current budget information.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BudgetInfo budget_info = 9 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $budget_info = null;
    /**
     * Optional. Current campaign image asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_image_asset_count = 10 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $campaign_image_asset_count = null;
    /**
     * Optional. Current campaign call asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_call_asset_count = 11 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $campaign_call_asset_count = null;
    /**
     * Optional. Current campaign country codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string country_codes = 13 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $country_codes;
    /**
     * Optional. Current campaign language codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string language_codes = 14 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $language_codes;
    /**
     * Optional. Current campaign positive location ids.
     * One of this field OR negative_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 positive_locations_ids = 15 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $positive_locations_ids;
    /**
     * Optional. Current campaign negative location ids.
     * One of this field OR positive_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 negative_locations_ids = 16 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $negative_locations_ids;
    /**
     * Optional. Current AssetGroup Information.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AssetGroupInfo asset_group_info = 17 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    private $asset_group_info;
    /**
     * Optional. If true, the campaign is opted into serving ads on the Google
     * Partner Network. This field is optional for the following
     * recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_partner_search_network = 18 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $target_partner_search_network = null;
    /**
     * Optional. If true, the campaign is opted into serving ads on specified
     * placements in the Google Display Network. This field is optional for the
     * following recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_content_network = 19 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $target_content_network = null;
    /**
     * Optional. Merchant Center account ID.
     * This field should only be set when advertising_channel_type is
     * PERFORMANCE_MAX. Setting this field causes RecommendationService
     * to generate recommendations for Performance Max for retail
     * instead of standard Performance Max.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int64 merchant_center_account_id = 20 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $merchant_center_account_id = null;
    /**
     * Optional. Whether or not this customer should be treated as a "new"
     * customer (that is, a customer who has not yet created a campaign).
     * Setting this to `true` will cause the backend to generate recommendations
     * using a dedicated recommendation model for onboarding new customers, as
     * opposed to the default model for existing customers. This is only
     * recommended for customers with 0 campaigns.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool is_new_customer = 21 [(.google.api.field_behavior) = OPTIONAL];</code>
     */
    protected $is_new_customer = null;

    /**
     * @param string $customerId             Required. The ID of the customer generating recommendations.
     * @param int[]  $recommendationTypes    Required. List of eligible recommendation_types to generate. If the
     *                                       uploaded criteria isn't sufficient to make a recommendation, or the
     *                                       campaign is already in the recommended state, no recommendation will be
     *                                       returned for that type. Generally, a recommendation is returned if all
     *                                       required fields for that recommendation_type are uploaded, but there are
     *                                       cases where this is still not sufficient.
     *
     *                                       The following recommendation_types are supported for recommendation
     *                                       generation:
     *                                       CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
     *                                       MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
     *                                       SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN,
     *                                       TARGET_ROAS_OPT_IN
     *                                       For allowed values, use constants defined on {@see \Google\Ads\GoogleAds\V23\Enums\RecommendationTypeEnum\RecommendationType}
     * @param int    $advertisingChannelType Required. Advertising channel type of the campaign.
     *                                       The following advertising_channel_types are supported for recommendation
     *                                       generation:
     *                                       PERFORMANCE_MAX and SEARCH
     *                                       For allowed values, use constants defined on {@see \Google\Ads\GoogleAds\V23\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType}
     *
     * @return \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest
     *
     * @experimental
     */
    public static function build(string $customerId, array $recommendationTypes, int $advertisingChannelType): self
    {
        return (new self())
            ->setCustomerId($customerId)
            ->setRecommendationTypes($recommendationTypes)
            ->setAdvertisingChannelType($advertisingChannelType);
    }

    /**
     * Constructor.
     *
     * @param array $data {
     *                    Optional. Data for populating the Message object.
     *
     * @type string $customer_id
     *           Required. The ID of the customer generating recommendations.
     * @type int[] $recommendation_types
     *           Required. List of eligible recommendation_types to generate. If the
     *           uploaded criteria isn't sufficient to make a recommendation, or the
     *           campaign is already in the recommended state, no recommendation will be
     *           returned for that type. Generally, a recommendation is returned if all
     *           required fields for that recommendation_type are uploaded, but there are
     *           cases where this is still not sufficient.
     *           The following recommendation_types are supported for recommendation
     *           generation:
     *           CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
     *           MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
     *           SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN,
     *           TARGET_ROAS_OPT_IN
     * @type int $advertising_channel_type
     *           Required. Advertising channel type of the campaign.
     *           The following advertising_channel_types are supported for recommendation
     *           generation:
     *           PERFORMANCE_MAX and SEARCH
     * @type int $campaign_sitelink_count
     *           Optional. Number of sitelinks on the campaign.
     *           This field is necessary for the following recommendation_types:
     *           SITELINK_ASSET
     * @type int $conversion_tracking_status
     *           Optional. Current conversion tracking status.
     *           This field is necessary for the following recommendation_types:
     *           MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     *           MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     *           TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     * @type \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BiddingInfo $bidding_info
     *           Optional. Current bidding information of the campaign.
     *           This field is necessary for the following recommendation_types:
     *           CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     *           MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     *           TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     * @type \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AdGroupInfo[] $ad_group_info
     *           Optional. Current AdGroup Information.
     *           Supports information from a single AdGroup.
     *           This field is optional for the following recommendation_types:
     *           KEYWORD
     *           This field is required for the following recommendation_types:
     *           CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     * @type \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\SeedInfo $seed_info
     *           Optional. Seed information for Keywords.
     *           This field is necessary for the following recommendation_types:
     *           KEYWORD
     * @type \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BudgetInfo $budget_info
     *           Optional. Current budget information.
     *           This field is optional for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * @type int $campaign_image_asset_count
     *           Optional. Current campaign image asset count.
     *           This field is optional for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * @type int $campaign_call_asset_count
     *           Optional. Current campaign call asset count.
     *           This field is optional for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * @type string[] $country_codes
     *           Optional. Current campaign country codes.
     *           This field is required for the following recommendation_types:
     *           CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     * @type string[] $language_codes
     *           Optional. Current campaign language codes.
     *           This field is required for the following recommendation_types:
     *           CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     * @type int[]|string[] $positive_locations_ids
     *           Optional. Current campaign positive location ids.
     *           One of this field OR negative_location_ids is required for the following
     *           recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     * @type int[]|string[] $negative_locations_ids
     *           Optional. Current campaign negative location ids.
     *           One of this field OR positive_location_ids is required for the following
     *           recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     * @type \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AssetGroupInfo[] $asset_group_info
     *           Optional. Current AssetGroup Information.
     *           This field is required for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * @type bool $target_partner_search_network
     *           Optional. If true, the campaign is opted into serving ads on the Google
     *           Partner Network. This field is optional for the following
     *           recommendation_types: CAMPAIGN_BUDGET
     * @type bool $target_content_network
     *           Optional. If true, the campaign is opted into serving ads on specified
     *           placements in the Google Display Network. This field is optional for the
     *           following recommendation_types: CAMPAIGN_BUDGET
     * @type int|string $merchant_center_account_id
     *           Optional. Merchant Center account ID.
     *           This field should only be set when advertising_channel_type is
     *           PERFORMANCE_MAX. Setting this field causes RecommendationService
     *           to generate recommendations for Performance Max for retail
     *           instead of standard Performance Max.
     *           This field is optional for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * @type bool $is_new_customer
     *           Optional. Whether or not this customer should be treated as a "new"
     *           customer (that is, a customer who has not yet created a campaign).
     *           Setting this to `true` will cause the backend to generate recommendations
     *           using a dedicated recommendation model for onboarding new customers, as
     *           opposed to the default model for existing customers. This is only
     *           recommended for customers with 0 campaigns.
     *           This field is optional for the following recommendation_types:
     *           CAMPAIGN_BUDGET
     * }
     */
    public function __construct($data = null)
    {
        \GPBMetadata\Google\Ads\GoogleAds\V23\Services\RecommendationService::initOnce();
        parent::__construct($data);
    }

    /**
     * Required. The ID of the customer generating recommendations.
     *
     * Generated from protobuf field <code>string customer_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return string
     */
    public function getCustomerId()
    {
        return $this->customer_id;
    }

    /**
     * Required. The ID of the customer generating recommendations.
     *
     * Generated from protobuf field <code>string customer_id = 1 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @param  string $var
     * @return $this
     */
    public function setCustomerId($var)
    {
        GPBUtil::checkString($var, true);
        $this->customer_id = $var;

        return $this;
    }

    /**
     * Required. List of eligible recommendation_types to generate. If the
     * uploaded criteria isn't sufficient to make a recommendation, or the
     * campaign is already in the recommended state, no recommendation will be
     * returned for that type. Generally, a recommendation is returned if all
     * required fields for that recommendation_type are uploaded, but there are
     * cases where this is still not sufficient.
     * The following recommendation_types are supported for recommendation
     * generation:
     * CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
     * MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
     * SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN,
     * TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.enums.RecommendationTypeEnum.RecommendationType recommendation_types = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return RepeatedField<int>
     */
    public function getRecommendationTypes()
    {
        return $this->recommendation_types;
    }

    /**
     * Required. List of eligible recommendation_types to generate. If the
     * uploaded criteria isn't sufficient to make a recommendation, or the
     * campaign is already in the recommended state, no recommendation will be
     * returned for that type. Generally, a recommendation is returned if all
     * required fields for that recommendation_type are uploaded, but there are
     * cases where this is still not sufficient.
     * The following recommendation_types are supported for recommendation
     * generation:
     * CAMPAIGN_BUDGET, KEYWORD, MAXIMIZE_CLICKS_OPT_IN,
     * MAXIMIZE_CONVERSIONS_OPT_IN, MAXIMIZE_CONVERSION_VALUE_OPT_IN,
     * SET_TARGET_CPA, SET_TARGET_ROAS, SITELINK_ASSET, TARGET_CPA_OPT_IN,
     * TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.enums.RecommendationTypeEnum.RecommendationType recommendation_types = 2 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @param  int[] $var
     * @return $this
     */
    public function setRecommendationTypes($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::ENUM, \Google\Ads\GoogleAds\V23\Enums\RecommendationTypeEnum\RecommendationType::class);
        $this->recommendation_types = $arr;

        return $this;
    }

    /**
     * Required. Advertising channel type of the campaign.
     * The following advertising_channel_types are supported for recommendation
     * generation:
     * PERFORMANCE_MAX and SEARCH
     *
     * Generated from protobuf field <code>.google.ads.googleads.v23.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @return int
     */
    public function getAdvertisingChannelType()
    {
        return $this->advertising_channel_type;
    }

    /**
     * Required. Advertising channel type of the campaign.
     * The following advertising_channel_types are supported for recommendation
     * generation:
     * PERFORMANCE_MAX and SEARCH
     *
     * Generated from protobuf field <code>.google.ads.googleads.v23.enums.AdvertisingChannelTypeEnum.AdvertisingChannelType advertising_channel_type = 3 [(.google.api.field_behavior) = REQUIRED];</code>
     *
     * @param  int $var
     * @return $this
     */
    public function setAdvertisingChannelType($var)
    {
        GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V23\Enums\AdvertisingChannelTypeEnum\AdvertisingChannelType::class);
        $this->advertising_channel_type = $var;

        return $this;
    }

    /**
     * Optional. Number of sitelinks on the campaign.
     * This field is necessary for the following recommendation_types:
     * SITELINK_ASSET
     *
     * Generated from protobuf field <code>optional int32 campaign_sitelink_count = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return int
     */
    public function getCampaignSitelinkCount()
    {
        return isset($this->campaign_sitelink_count) ? $this->campaign_sitelink_count : 0;
    }

    public function hasCampaignSitelinkCount()
    {
        return isset($this->campaign_sitelink_count);
    }

    public function clearCampaignSitelinkCount()
    {
        unset($this->campaign_sitelink_count);
    }

    /**
     * Optional. Number of sitelinks on the campaign.
     * This field is necessary for the following recommendation_types:
     * SITELINK_ASSET
     *
     * Generated from protobuf field <code>optional int32 campaign_sitelink_count = 4 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int $var
     * @return $this
     */
    public function setCampaignSitelinkCount($var)
    {
        GPBUtil::checkInt32($var);
        $this->campaign_sitelink_count = $var;

        return $this;
    }

    /**
     * Optional. Current conversion tracking status.
     * This field is necessary for the following recommendation_types:
     * MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.enums.ConversionTrackingStatusEnum.ConversionTrackingStatus conversion_tracking_status = 5 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return int
     */
    public function getConversionTrackingStatus()
    {
        return isset($this->conversion_tracking_status) ? $this->conversion_tracking_status : 0;
    }

    public function hasConversionTrackingStatus()
    {
        return isset($this->conversion_tracking_status);
    }

    public function clearConversionTrackingStatus()
    {
        unset($this->conversion_tracking_status);
    }

    /**
     * Optional. Current conversion tracking status.
     * This field is necessary for the following recommendation_types:
     * MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.enums.ConversionTrackingStatusEnum.ConversionTrackingStatus conversion_tracking_status = 5 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int $var
     * @return $this
     */
    public function setConversionTrackingStatus($var)
    {
        GPBUtil::checkEnum($var, \Google\Ads\GoogleAds\V23\Enums\ConversionTrackingStatusEnum\ConversionTrackingStatus::class);
        $this->conversion_tracking_status = $var;

        return $this;
    }

    /**
     * Optional. Current bidding information of the campaign.
     * This field is necessary for the following recommendation_types:
     * CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BiddingInfo bidding_info = 6 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BiddingInfo|null
     */
    public function getBiddingInfo()
    {
        return $this->bidding_info;
    }

    public function hasBiddingInfo()
    {
        return isset($this->bidding_info);
    }

    public function clearBiddingInfo()
    {
        unset($this->bidding_info);
    }

    /**
     * Optional. Current bidding information of the campaign.
     * This field is necessary for the following recommendation_types:
     * CAMPAIGN_BUDGET, MAXIMIZE_CLICKS_OPT_IN, MAXIMIZE_CONVERSIONS_OPT_IN,
     * MAXIMIZE_CONVERSION_VALUE_OPT_IN, SET_TARGET_CPA, SET_TARGET_ROAS,
     * TARGET_CPA_OPT_IN, TARGET_ROAS_OPT_IN
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BiddingInfo bidding_info = 6 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BiddingInfo $var
     * @return $this
     */
    public function setBiddingInfo($var)
    {
        GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BiddingInfo::class);
        $this->bidding_info = $var;

        return $this;
    }

    /**
     * Optional. Current AdGroup Information.
     * Supports information from a single AdGroup.
     * This field is optional for the following recommendation_types:
     * KEYWORD
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AdGroupInfo ad_group_info = 7 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<\Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AdGroupInfo>
     */
    public function getAdGroupInfo()
    {
        return $this->ad_group_info;
    }

    /**
     * Optional. Current AdGroup Information.
     * Supports information from a single AdGroup.
     * This field is optional for the following recommendation_types:
     * KEYWORD
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AdGroupInfo ad_group_info = 7 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AdGroupInfo[] $var
     * @return $this
     */
    public function setAdGroupInfo($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AdGroupInfo::class);
        $this->ad_group_info = $arr;

        return $this;
    }

    /**
     * Optional. Seed information for Keywords.
     * This field is necessary for the following recommendation_types:
     * KEYWORD
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.SeedInfo seed_info = 8 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\SeedInfo|null
     */
    public function getSeedInfo()
    {
        return $this->seed_info;
    }

    public function hasSeedInfo()
    {
        return isset($this->seed_info);
    }

    public function clearSeedInfo()
    {
        unset($this->seed_info);
    }

    /**
     * Optional. Seed information for Keywords.
     * This field is necessary for the following recommendation_types:
     * KEYWORD
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.SeedInfo seed_info = 8 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\SeedInfo $var
     * @return $this
     */
    public function setSeedInfo($var)
    {
        GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\SeedInfo::class);
        $this->seed_info = $var;

        return $this;
    }

    /**
     * Optional. Current budget information.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BudgetInfo budget_info = 9 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BudgetInfo|null
     */
    public function getBudgetInfo()
    {
        return $this->budget_info;
    }

    public function hasBudgetInfo()
    {
        return isset($this->budget_info);
    }

    public function clearBudgetInfo()
    {
        unset($this->budget_info);
    }

    /**
     * Optional. Current budget information.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional .google.ads.googleads.v23.services.GenerateRecommendationsRequest.BudgetInfo budget_info = 9 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BudgetInfo $var
     * @return $this
     */
    public function setBudgetInfo($var)
    {
        GPBUtil::checkMessage($var, \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\BudgetInfo::class);
        $this->budget_info = $var;

        return $this;
    }

    /**
     * Optional. Current campaign image asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_image_asset_count = 10 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return int
     */
    public function getCampaignImageAssetCount()
    {
        return isset($this->campaign_image_asset_count) ? $this->campaign_image_asset_count : 0;
    }

    public function hasCampaignImageAssetCount()
    {
        return isset($this->campaign_image_asset_count);
    }

    public function clearCampaignImageAssetCount()
    {
        unset($this->campaign_image_asset_count);
    }

    /**
     * Optional. Current campaign image asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_image_asset_count = 10 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int $var
     * @return $this
     */
    public function setCampaignImageAssetCount($var)
    {
        GPBUtil::checkInt32($var);
        $this->campaign_image_asset_count = $var;

        return $this;
    }

    /**
     * Optional. Current campaign call asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_call_asset_count = 11 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return int
     */
    public function getCampaignCallAssetCount()
    {
        return isset($this->campaign_call_asset_count) ? $this->campaign_call_asset_count : 0;
    }

    public function hasCampaignCallAssetCount()
    {
        return isset($this->campaign_call_asset_count);
    }

    public function clearCampaignCallAssetCount()
    {
        unset($this->campaign_call_asset_count);
    }

    /**
     * Optional. Current campaign call asset count.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int32 campaign_call_asset_count = 11 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int $var
     * @return $this
     */
    public function setCampaignCallAssetCount($var)
    {
        GPBUtil::checkInt32($var);
        $this->campaign_call_asset_count = $var;

        return $this;
    }

    /**
     * Optional. Current campaign country codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string country_codes = 13 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<string>
     */
    public function getCountryCodes()
    {
        return $this->country_codes;
    }

    /**
     * Optional. Current campaign country codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string country_codes = 13 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  string[] $var
     * @return $this
     */
    public function setCountryCodes($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->country_codes = $arr;

        return $this;
    }

    /**
     * Optional. Current campaign language codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string language_codes = 14 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<string>
     */
    public function getLanguageCodes()
    {
        return $this->language_codes;
    }

    /**
     * Optional. Current campaign language codes.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated string language_codes = 14 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  string[] $var
     * @return $this
     */
    public function setLanguageCodes($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::STRING);
        $this->language_codes = $arr;

        return $this;
    }

    /**
     * Optional. Current campaign positive location ids.
     * One of this field OR negative_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 positive_locations_ids = 15 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<int>|RepeatedField<string>
     */
    public function getPositiveLocationsIds()
    {
        return $this->positive_locations_ids;
    }

    /**
     * Optional. Current campaign positive location ids.
     * One of this field OR negative_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 positive_locations_ids = 15 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int[]|string[] $var
     * @return $this
     */
    public function setPositiveLocationsIds($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT64);
        $this->positive_locations_ids = $arr;

        return $this;
    }

    /**
     * Optional. Current campaign negative location ids.
     * One of this field OR positive_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 negative_locations_ids = 16 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<int>|RepeatedField<string>
     */
    public function getNegativeLocationsIds()
    {
        return $this->negative_locations_ids;
    }

    /**
     * Optional. Current campaign negative location ids.
     * One of this field OR positive_location_ids is required for the following
     * recommendation_types: CAMPAIGN_BUDGET if AdvertisingChannelType is SEARCH
     *
     * Generated from protobuf field <code>repeated int64 negative_locations_ids = 16 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int[]|string[] $var
     * @return $this
     */
    public function setNegativeLocationsIds($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::INT64);
        $this->negative_locations_ids = $arr;

        return $this;
    }

    /**
     * Optional. Current AssetGroup Information.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AssetGroupInfo asset_group_info = 17 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return RepeatedField<\Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AssetGroupInfo>
     */
    public function getAssetGroupInfo()
    {
        return $this->asset_group_info;
    }

    /**
     * Optional. Current AssetGroup Information.
     * This field is required for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>repeated .google.ads.googleads.v23.services.GenerateRecommendationsRequest.AssetGroupInfo asset_group_info = 17 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AssetGroupInfo[] $var
     * @return $this
     */
    public function setAssetGroupInfo($var)
    {
        $arr = GPBUtil::checkRepeatedField($var, \Google\Protobuf\Internal\GPBType::MESSAGE, \Google\Ads\GoogleAds\V23\Services\GenerateRecommendationsRequest\AssetGroupInfo::class);
        $this->asset_group_info = $arr;

        return $this;
    }

    /**
     * Optional. If true, the campaign is opted into serving ads on the Google
     * Partner Network. This field is optional for the following
     * recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_partner_search_network = 18 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return bool
     */
    public function getTargetPartnerSearchNetwork()
    {
        return isset($this->target_partner_search_network) ? $this->target_partner_search_network : false;
    }

    public function hasTargetPartnerSearchNetwork()
    {
        return isset($this->target_partner_search_network);
    }

    public function clearTargetPartnerSearchNetwork()
    {
        unset($this->target_partner_search_network);
    }

    /**
     * Optional. If true, the campaign is opted into serving ads on the Google
     * Partner Network. This field is optional for the following
     * recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_partner_search_network = 18 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  bool $var
     * @return $this
     */
    public function setTargetPartnerSearchNetwork($var)
    {
        GPBUtil::checkBool($var);
        $this->target_partner_search_network = $var;

        return $this;
    }

    /**
     * Optional. If true, the campaign is opted into serving ads on specified
     * placements in the Google Display Network. This field is optional for the
     * following recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_content_network = 19 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return bool
     */
    public function getTargetContentNetwork()
    {
        return isset($this->target_content_network) ? $this->target_content_network : false;
    }

    public function hasTargetContentNetwork()
    {
        return isset($this->target_content_network);
    }

    public function clearTargetContentNetwork()
    {
        unset($this->target_content_network);
    }

    /**
     * Optional. If true, the campaign is opted into serving ads on specified
     * placements in the Google Display Network. This field is optional for the
     * following recommendation_types: CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool target_content_network = 19 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  bool $var
     * @return $this
     */
    public function setTargetContentNetwork($var)
    {
        GPBUtil::checkBool($var);
        $this->target_content_network = $var;

        return $this;
    }

    /**
     * Optional. Merchant Center account ID.
     * This field should only be set when advertising_channel_type is
     * PERFORMANCE_MAX. Setting this field causes RecommendationService
     * to generate recommendations for Performance Max for retail
     * instead of standard Performance Max.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int64 merchant_center_account_id = 20 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return int|string
     */
    public function getMerchantCenterAccountId()
    {
        return isset($this->merchant_center_account_id) ? $this->merchant_center_account_id : 0;
    }

    public function hasMerchantCenterAccountId()
    {
        return isset($this->merchant_center_account_id);
    }

    public function clearMerchantCenterAccountId()
    {
        unset($this->merchant_center_account_id);
    }

    /**
     * Optional. Merchant Center account ID.
     * This field should only be set when advertising_channel_type is
     * PERFORMANCE_MAX. Setting this field causes RecommendationService
     * to generate recommendations for Performance Max for retail
     * instead of standard Performance Max.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional int64 merchant_center_account_id = 20 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  int|string $var
     * @return $this
     */
    public function setMerchantCenterAccountId($var)
    {
        GPBUtil::checkInt64($var);
        $this->merchant_center_account_id = $var;

        return $this;
    }

    /**
     * Optional. Whether or not this customer should be treated as a "new"
     * customer (that is, a customer who has not yet created a campaign).
     * Setting this to `true` will cause the backend to generate recommendations
     * using a dedicated recommendation model for onboarding new customers, as
     * opposed to the default model for existing customers. This is only
     * recommended for customers with 0 campaigns.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool is_new_customer = 21 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @return bool
     */
    public function getIsNewCustomer()
    {
        return isset($this->is_new_customer) ? $this->is_new_customer : false;
    }

    public function hasIsNewCustomer()
    {
        return isset($this->is_new_customer);
    }

    public function clearIsNewCustomer()
    {
        unset($this->is_new_customer);
    }

    /**
     * Optional. Whether or not this customer should be treated as a "new"
     * customer (that is, a customer who has not yet created a campaign).
     * Setting this to `true` will cause the backend to generate recommendations
     * using a dedicated recommendation model for onboarding new customers, as
     * opposed to the default model for existing customers. This is only
     * recommended for customers with 0 campaigns.
     * This field is optional for the following recommendation_types:
     * CAMPAIGN_BUDGET
     *
     * Generated from protobuf field <code>optional bool is_new_customer = 21 [(.google.api.field_behavior) = OPTIONAL];</code>
     *
     * @param  bool $var
     * @return $this
     */
    public function setIsNewCustomer($var)
    {
        GPBUtil::checkBool($var);
        $this->is_new_customer = $var;

        return $this;
    }

}

