// Copyright 2026 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.admanager.v1;

option csharp_namespace = "Google.Ads.AdManager.V1";
option go_package = "google.golang.org/genproto/googleapis/ads/admanager/v1;admanager";
option java_multiple_files = true;
option java_outer_classname = "DeliveryEnumsProto";
option java_package = "com.google.ads.admanager.v1";
option php_namespace = "Google\\Ads\\AdManager\\V1";
option ruby_package = "Google::Ads::AdManager::V1";

// Wrapper message for
// [LineItemDeliveryRateType][google.ads.admanager.v1.LineItemDeliveryRateTypeEnum.LineItemDeliveryRateType].
message LineItemDeliveryRateTypeEnum {
  // Possible delivery rates for a [LineItem][google.ads.admanager.v1.LineItem].
  // It dictates the manner in which the LineItem is served.
  enum LineItemDeliveryRateType {
    // No value specified.
    LINE_ITEM_DELIVERY_RATE_TYPE_UNSPECIFIED = 0;

    // The booked impressions may delivered well before the end time. Other
    // lower-priority or lower-value LineItems will be stopped from delivering
    // until the LineItem meets the number of impressions or clicks it is
    // booked for.
    AS_FAST_AS_POSSIBLE = 3;

    // LineItems are served as evenly as possible across the number of days
    // specified in a LineItem's duration.
    EVENLY = 1;

    // LineItems are served more aggressively in the beginning of the flight
    // date.
    FRONTLOADED = 2;
  }
}

// Wrapper message for
// [RoadblockingType][google.ads.admanager.v1.RoadblockingTypeEnum.RoadblockingType]
message RoadblockingTypeEnum {
  // Describes the roadblocking types.
  enum RoadblockingType {
    // Default value. This value is unused.
    ROADBLOCKING_TYPE_UNSPECIFIED = 0;

    // All or none of the creatives from a line item will serve. This option
    // will only work if served to a GPT tag using SRA (single request
    // architecture mode).
    ALL_ROADBLOCK = 1;

    // As many creatives from a line item as can fit on a page will serve. This
    // could mean anywhere from one to all of a line item's creatives given the
    // size constraints of ad slots on a page.
    AS_MANY_AS_POSSIBLE = 2;

    // A master/companion creative set roadblocking type.
    // A [CreativePlaceholder][google.ads.admanager.v1.CreativePlaceholder] must
    // be set accordingly.
    CREATIVE_SET = 3;

    // Any number of creatives from a line item can serve together at a time.
    ONE_OR_MORE = 4;

    // Only one creative from a line item can serve at a time.
    ONLY_ONE = 5;
  }
}

// Wrapper message for
// [CompanionDeliveryOption][google.ads.admanager.v1.CompanionDeliveryOptionEnum.CompanionDeliveryOption].
message CompanionDeliveryOptionEnum {
  // Defines the different delivery types of a line item companion.
  enum CompanionDeliveryOption {
    // No value specified.
    COMPANION_DELIVERY_OPTION_UNSPECIFIED = 0;

    // Companions are not required to serve a
    // [CreativeSet][google.ads.admanager.v1.CreativeSet]. The creative set can
    // serve to inventory that has zero or more matching companions.
    OPTIONAL = 1;

    // At least one companion must be served in order for the creative set to be
    // used.
    AT_LEAST_ONE = 2;

    // All companions in the set must be served in order for the creative set to
    // be used. This can still serve to inventory that has more companions than
    // can be filled.
    ALL = 3;
  }
}

// Wrapper message for
// [CreativeRotationType][google.ads.admanager.v1.CreativeRotationTypeEnum.CreativeRotationType].
message CreativeRotationTypeEnum {
  // The strategy to use for displaying multiple creatives that are associated
  // with a line item.
  enum CreativeRotationType {
    // No value specified.
    CREATIVE_ROTATION_TYPE_UNSPECIFIED = 0;

    // Creatives are displayed approximately the same number of times over the
    // duration of the line item.
    EVENLY = 1;

    // Creatives are served approximately proportionally to their performance.
    OPTIMIZED = 2;

    // Creatives are served exactly in sequential order, aka Storyboarding. Set
    // on the LineItemCreativeAssociation.
    SEQUENTIAL = 4;

    // Creatives are served approximately proportionally to their weights, set
    // on the LineItemCreativeAssociation.
    WEIGHTED = 3;
  }
}
