// 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.maps.mapmanagement.v2beta;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/empty.proto";
import "google/protobuf/field_mask.proto";
import "google/protobuf/timestamp.proto";

option csharp_namespace = "Google.Maps.MapManagement.V2Beta";
option go_package = "cloud.google.com/go/maps/mapmanagement/apiv2beta/mapmanagementpb;mapmanagementpb";
option java_multiple_files = true;
option java_outer_classname = "MapManagementServiceProto";
option java_package = "com.google.maps.mapmanagement.v2beta";
option objc_class_prefix = "GMMGMTV2MAIN";
option php_namespace = "Google\\Maps\\MapManagement\\V2beta";
option (google.api.resource_definition) = {
  type: "mapmanagement.googleapis.com/Dataset"
  pattern: "projects/{project}/datasets/{dataset}"
  plural: "datasets"
  singular: "dataset"
};

// The Map Management API uses your inputs to create and manage
// Google Cloud based styling resources for Google Maps.
//
// Using this API, you can can create and manage MapConfigs (Map IDs),
// StyleConfigs (JSON-based styling), and MapContextConfigs (associations
// between styles, datasets, and map variants).
//
// This API offers features through three channels:
// * `v2alpha`: Experimental features.
// * `v2beta`: Preview features, recommended for early adoption.
// * `v2`: General Availability (GA) features.
//
// Capabilities described here are generally available across both the v2alpha
// and v2beta endpoints.
service MapManagement {
  option (google.api.default_host) = "mapmanagement.googleapis.com";
  option (google.api.oauth_scopes) =
      "https://www.googleapis.com/auth/cloud-platform";

  // Creates a MapConfig in a project.
  rpc CreateMapConfig(CreateMapConfigRequest) returns (MapConfig) {
    option (google.api.http) = {
      post: "/v2beta/{parent=projects/*}/mapConfigs"
      body: "map_config"
    };
    option (google.api.method_signature) = "parent,map_config";
  }

  // Gets a MapConfig.
  rpc GetMapConfig(GetMapConfigRequest) returns (MapConfig) {
    option (google.api.http) = {
      get: "/v2beta/{name=projects/*/mapConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists MapConfigs for a project.
  rpc ListMapConfigs(ListMapConfigsRequest) returns (ListMapConfigsResponse) {
    option (google.api.http) = {
      get: "/v2beta/{parent=projects/*}/mapConfigs"
    };
    option (google.api.method_signature) = "parent";
  }

  // Updates a MapConfig.
  rpc UpdateMapConfig(UpdateMapConfigRequest) returns (MapConfig) {
    option (google.api.http) = {
      patch: "/v2beta/{map_config.name=projects/*/mapConfigs/*}"
      body: "map_config"
    };
    option (google.api.method_signature) = "map_config,update_mask";
  }

  // Deletes a MapConfig.
  rpc DeleteMapConfig(DeleteMapConfigRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v2beta/{name=projects/*/mapConfigs/*}"
    };
    option (google.api.method_signature) = "name,force";
  }

  // Creates a StyleConfig.
  rpc CreateStyleConfig(CreateStyleConfigRequest) returns (StyleConfig) {
    option (google.api.http) = {
      post: "/v2beta/{parent=projects/*}/styleConfigs"
      body: "style_config"
    };
    option (google.api.method_signature) = "parent,style_config";
  }

  // Gets a StyleConfig.
  rpc GetStyleConfig(GetStyleConfigRequest) returns (StyleConfig) {
    option (google.api.http) = {
      get: "/v2beta/{name=projects/*/styleConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists StyleConfigs.
  rpc ListStyleConfigs(ListStyleConfigsRequest)
      returns (ListStyleConfigsResponse) {
    option (google.api.http) = {
      get: "/v2beta/{parent=projects/*}/styleConfigs"
    };
    option (google.api.method_signature) = "parent";
  }

  // Updates a StyleConfig.
  rpc UpdateStyleConfig(UpdateStyleConfigRequest) returns (StyleConfig) {
    option (google.api.http) = {
      patch: "/v2beta/{style_config.name=projects/*/styleConfigs/*}"
      body: "style_config"
    };
    option (google.api.method_signature) = "style_config,update_mask";
  }

  // Deletes a StyleConfig.
  rpc DeleteStyleConfig(DeleteStyleConfigRequest)
      returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v2beta/{name=projects/*/styleConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Creates a MapContextConfig.
  rpc CreateMapContextConfig(CreateMapContextConfigRequest)
      returns (MapContextConfig) {
    option (google.api.http) = {
      post: "/v2beta/{parent=projects/*/mapConfigs/*}/mapContextConfigs"
      body: "map_context_config"
    };
    option (google.api.method_signature) = "parent,map_context_config";
  }

  // Gets a MapContextConfig.
  rpc GetMapContextConfig(GetMapContextConfigRequest)
      returns (MapContextConfig) {
    option (google.api.http) = {
      get: "/v2beta/{name=projects/*/mapConfigs/*/mapContextConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Lists MapContextConfigs.
  rpc ListMapContextConfigs(ListMapContextConfigsRequest)
      returns (ListMapContextConfigsResponse) {
    option (google.api.http) = {
      get: "/v2beta/{parent=projects/*/mapConfigs/*}/mapContextConfigs"
    };
    option (google.api.method_signature) = "parent";
  }

  // Updates a MapContextConfig.
  rpc UpdateMapContextConfig(UpdateMapContextConfigRequest)
      returns (MapContextConfig) {
    option (google.api.http) = {
      patch: "/v2beta/{map_context_config.name=projects/*/mapConfigs/*/mapContextConfigs/*}"
      body: "map_context_config"
    };
    option (google.api.method_signature) = "map_context_config,update_mask";
  }

  // Deletes a MapContextConfig.
  rpc DeleteMapContextConfig(DeleteMapContextConfigRequest)
      returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v2beta/{name=projects/*/mapConfigs/*/mapContextConfigs/*}"
    };
    option (google.api.method_signature) = "name";
  }
}

// What subset of the StyleConfig to return.
enum StyleConfigView {
  // Unspecified view.
  STYLE_CONFIG_VIEW_UNSPECIFIED = 0;

  // Include the json_style_sheet in the response.
  FULL = 1;

  // Exclude the json_style_sheet from the response.
  METADATA_ONLY = 2;
}

// The type of map to be rendered.
enum MapRenderingType {
  // A map rendered using the raster based implementation. This is the default
  // rendering type if not specified.
  RASTER = 0;

  // A map rendered using webGL.
  VECTOR = 1;
}

// Request to create a MapConfig.
message CreateMapConfigRequest {
  // Required. Parent project that will own the MapConfig.
  // Format: `projects/{$my-project-id}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "cloudresourcemanager.googleapis.com/Project"
    }
  ];

  // Required. The MapConfig to create.
  MapConfig map_config = 2 [(google.api.field_behavior) = REQUIRED];
}

// Request to get a MapConfig.
message GetMapConfigRequest {
  // Required. Resource name of the MapConfig.
  // Format: `projects/{project}/mapConfigs/{map_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapConfig"
    }
  ];
}

// Request to list MapConfigs.
message ListMapConfigsRequest {
  // Required. Parent project that owns the MapConfigs.
  // Format: `projects/{project}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "cloudresourcemanager.googleapis.com/Project"
    }
  ];

  // Optional. The maximum number of MapConfigs to return. The service may
  // return fewer than this value. If unspecified, at most 50 MapConfigs will be
  // returned. The maximum value is 1000; values above 1000 will be coerced to
  // 1000. CURRENTLY UNSUPPORTED.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A page token, received from a previous `ListMapConfigs` call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to `ListMapConfigs` must
  // match the call that provided the page token.
  // CURRENTLY UNSUPPORTED.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// Response to list MapConfigs.
message ListMapConfigsResponse {
  // The list of MapConfigs.
  repeated MapConfig map_configs = 1;

  // A token, which can be sent as `page_token` to retrieve the next page.
  // If this field is omitted, there are no subsequent pages.
  // CURRENTLY UNSUPPORTED.
  string next_page_token = 2;
}

// Request to update a MapConfig.
message UpdateMapConfigRequest {
  // Required. The MapConfig to update.
  //
  // The MapConfig's `name` field is used to identify the MapConfig to update.
  // Format: `projects/{project}/mapConfigs/{map_config}`
  MapConfig map_config = 1 [(google.api.field_behavior) = REQUIRED];

  // Optional. The specific field to update for the MapConfig. If not specified,
  // the MapConfig will be updated in its entirety. Valid fields are:
  //
  // * `display_name`
  // * `description`
  // * `map_features`
  google.protobuf.FieldMask update_mask = 2
      [(google.api.field_behavior) = OPTIONAL];
}

// Request to delete a MapConfig. If the MapConfig has any child
// MapContextConfigs, those will be deleted as well.
message DeleteMapConfigRequest {
  // Required. Resource name of the MapConfig to delete.
  // Format: `projects/{project}/mapConfigs/{map_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapConfig"
    }
  ];

  // Optional. If set to true, any MapContextConfigs from this MapConfig will
  // also be deleted. (Otherwise, the request will only work if the MapConfig
  // has no MapContextConfigs.)
  bool force = 2 [(google.api.field_behavior) = OPTIONAL];
}

// Represents a collection of map features that apply to a MapConfig.
// Features set on a MapConfig are inherited by all of its child
// MapContextConfigs.
// Next ID = 3;
message MapFeatures {
  // This represents the set of map features that affect the intrinsic
  // structure of the map.
  enum SimpleFeature {
    // Unspecified visual feature.
    SIMPLE_FEATURE_UNSPECIFIED = 0;

    // Flattens all buildings in the map.
    FLATTEN_BUILDINGS = 1;

    // Influences how icons are rendered.
    ICONIC_ICONS = 2;
  }

  // Optional. The visual feature to use for this map.
  repeated SimpleFeature simple_features = 1
      [(google.api.field_behavior) = OPTIONAL];

  // Optional. POI Boost level, where 0 denotes no boostings and negative values
  // denotes de-boosting. Boosted POIs are shown at lower zoom than default and
  // vice versa de-boosted. Currently supports 2 levels of boosting, so the
  // level is clamped to [-2, 2]. If not specified, the POI density defined in
  // the style sheet will be used if it exists. Otherwise, no POI density will
  // be applied.
  optional int32 poi_boost_level = 2 [(google.api.field_behavior) = OPTIONAL];
}

// Represents a single map in a Maps API client application. The MapConfig is
// the parent resource of MapContextConfigs and enables custom styling in SDKs
// (Mobile/Web). A MapConfig can have multiple MapContextConfigs, each applying
// styling to specific map variants.
// Next ID = 9;
message MapConfig {
  option (google.api.resource) = {
    type: "mapmanagement.googleapis.com/MapConfig"
    pattern: "projects/{project}/mapConfigs/{map_config}"
    plural: "mapConfigs"
    singular: "mapConfig"
  };

  // Output only. Identifier. Resource name of this MapConfig.
  // For example: "projects/my-project-123/mapConfigs/234".
  // Output only.
  string name = 1 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.field_behavior) = IDENTIFIER
  ];

  // Optional. The display name of this MapConfig, as specified by the user.
  string display_name = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The description of this MapConfig, as specified by the user.
  string description = 3 [(google.api.field_behavior) = OPTIONAL];

  // Output only. The Map ID of this MapConfig, used to identify the map in
  // client applications. This read-only field is generated when the MapConfig
  // is created. Output only.
  string map_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. The Map Features that apply to this Map Config.
  MapFeatures map_features = 5 [(google.api.field_behavior) = OPTIONAL];

  // Output only. Denotes the creation time of the Map Config. Output only.
  optional google.protobuf.Timestamp create_time = 6
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Denotes the last update time of the Map Config. Output only.
  optional google.protobuf.Timestamp update_time = 7
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. Represents the Map Type of the MapConfig. If this is unset, the
  // default behavior is to use the raster map type.
  MapRenderingType map_type = 8 [(google.api.field_behavior) = OPTIONAL];
}

// Represents a single style in a Maps API client application. The StyleConfig
// contains the style sheet that defines the visual appearance of the map.
// Next ID = 9;
message StyleConfig {
  option (google.api.resource) = {
    type: "mapmanagement.googleapis.com/StyleConfig"
    pattern: "projects/{project}/styleConfigs/{style_config}"
    plural: "styleConfigs"
    singular: "styleConfig"
  };

  // Output only. Identifier. Resource name of this StyleConfig.
  // For example: "projects/my-project-123/styleConfigs/234".
  string name = 1 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.field_behavior) = IDENTIFIER
  ];

  // Optional. The display name of this StyleConfig, as specified by the user.
  string display_name = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The description of this StyleConfig, as specified by the user.
  string description = 3 [(google.api.field_behavior) = OPTIONAL];

  // Output only. The unique identifier of this style. This is a read-only field
  // that is generated when the StyleConfig is created. Output only.
  string style_id = 4 [(google.api.field_behavior) = OUTPUT_ONLY];

  // Optional. JSON representation of the style sheet for this StyleConfig. If
  // not specified or if provided as an empty string, the base unstyled Google
  // map style will be used. See
  // https://developers.google.com/maps/documentation/javascript/cloud-customization/json-reference
  // for more details on the acceptable JSON format.
  string json_style_sheet = 6 [(google.api.field_behavior) = OPTIONAL];

  // Output only. Denotes the creation time of the StyleConfig.
  optional google.protobuf.Timestamp create_time = 7
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Denotes the last update time of the StyleConfig.
  optional google.protobuf.Timestamp update_time = 8
      [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Request to create a StyleConfig.
message CreateStyleConfigRequest {
  // Required. Parent project that will own the StyleConfig.
  // Format: `projects/{project}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "cloudresourcemanager.googleapis.com/Project"
    }
  ];

  // Required. The StyleConfig to create.
  StyleConfig style_config = 2 [(google.api.field_behavior) = REQUIRED];
}

// Request to get a StyleConfig.
message GetStyleConfigRequest {
  // Required. Resource name of the StyleConfig.
  // Format: `projects/{project}/styleConfigs/{style_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/StyleConfig"
    }
  ];
}

// Request to list StyleConfigs.
message ListStyleConfigsRequest {
  // Required. Parent project that owns the StyleConfigs.
  // Format: `projects/{project}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "cloudresourcemanager.googleapis.com/Project"
    }
  ];

  // Optional. The maximum number of StyleConfigs to return. The service may
  // return fewer than this value. If unspecified, at most 50 StyleConfigs will
  // be returned. The maximum value is 1000; values above 1000 will be coerced
  // to 1000. CURRENTLY UNSUPPORTED.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A page token, received from a previous `ListStyleConfigs` call.
  // Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to `ListStyleConfigs` must
  // match the call that provided the page token.
  // CURRENTLY UNSUPPORTED.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];

  // Optional. Filter expression for the ListStyleConfigs call.
  // Currently only supports filtering by display_name.
  // For example: `display_name="My StyleConfig"` will return all StyleConfigs
  // with the display name "My StyleConfig".
  string filter = 4 [(google.api.field_behavior) = OPTIONAL];

  // Optional. The subset of the StyleConfig to return. If this is unset, the
  // default behavior is to return the FULL view.
  StyleConfigView view = 5 [(google.api.field_behavior) = OPTIONAL];
}

// Response to list StyleConfigs.
message ListStyleConfigsResponse {
  // The StyleConfigs.
  repeated StyleConfig style_configs = 1;

  // A token, which can be sent as `page_token` to retrieve the next page.
  // If this field is omitted, there are no subsequent pages.
  // CURRENTLY UNSUPPORTED.
  string next_page_token = 2;
}

// Request to update a StyleConfig.
message UpdateStyleConfigRequest {
  // Required. The StyleConfig to update.
  //
  // The StyleConfig's `name` field is used to identify the StyleConfig to
  // update. Format: `projects/{project}/styleConfigs/{style_config}`
  StyleConfig style_config = 1 [(google.api.field_behavior) = REQUIRED];

  // Optional. The list of fields to update. If not specified, the StyleConfig
  // will be updated in its entirety. Valid fields are:
  //
  // * `display_name`
  // * `description`
  // * `json_style_sheet`
  google.protobuf.FieldMask update_mask = 2
      [(google.api.field_behavior) = OPTIONAL];
}

// Request to delete a StyleConfig.
message DeleteStyleConfigRequest {
  // Required. Resource name of the StyleConfig to delete.
  // Format: `projects/{project}/styleConfigs/{style_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/StyleConfig"
    }
  ];
}

// Encapsulates the styling configuration for a map. The MapContextConfig
// associates styling components, such as a StyleConfig and Datasets, with
// specific map variants of a MapConfig. When the MapConfig is loaded in an SDK,
// the styling and dataset information from the MapContextConfig are applied to
// the specified map variants.
// Next ID = 10;
message MapContextConfig {
  option (google.api.resource) = {
    type: "mapmanagement.googleapis.com/MapContextConfig"
    pattern: "projects/{project}/mapConfigs/{map_config}/mapContextConfigs/{map_context_config}"
    plural: "mapContextConfigs"
    singular: "mapContextConfig"
  };

  // Possible Map Variants that the MapContextConfig can be applied to.
  // Map Variants are grouped into Light and Dark variants. A Light variant
  // cannot be paired with a Dark variant for the same MapContextConfig.
  // The Light Variants are: ROADMAP, SATELLITE, TERRAIN, NAVIGATION, TRANSIT,
  // ABSTRACT3D, PHOTOREALISTIC3D.
  // The Dark Variants are: ROADMAP_DARK, NAVIGATION_LOW_LIGHT, TERRAIN_DARK,
  // TRANSIT_DARK.
  //
  // For example, the following is a valid pairing:
  // {MapContextConfig 1: [ROADMAP, NAVIGATION]}
  // {MapContextConfig 2: [ROADMAP_DARK, NAVIGATION_LOW_LIGHT]}
  //
  // The following is an invalid pairing:
  // {MapContextConfig 1: [ROADMAP, ROADMAP_DARK]}
  enum MapVariant {
    // The default roadmap map type. If no map variants are specified in a
    // MapContextConfig, this variant is used by default.
    ROADMAP = 0;

    // A dark version of the roadmap map type.
    ROADMAP_DARK = 1;

    // Satellite imagery.
    SATELLITE = 2;

    // Terrain map type.
    TERRAIN = 3;

    // A dark version of the terrain map type.
    TERRAIN_DARK = 4;

    // Navigation map type.
    NAVIGATION = 5;

    // A low light version of the navigation map type.
    NAVIGATION_LOW_LIGHT = 6;

    // Transit map type.
    TRANSIT = 7;

    // A dark version of the transit map type.
    TRANSIT_DARK = 8;

    // Abstract 3D map type.
    ABSTRACT3D = 9;

    // Photorealistic 3D map type.
    PHOTOREALISTIC3D = 10;
  }

  // Output only. Identifier. Resource name of this MapContextConfig.
  // For example:
  // projects/{project_id}/mapConfigs/{map_id}/mapContextConfigs/{map_context_config_id}
  string name = 1 [
    (google.api.field_behavior) = OUTPUT_ONLY,
    (google.api.field_behavior) = IDENTIFIER
  ];

  // Required. The MapConfig resource name that this MapContextConfig is
  // associated with. Format: projects/{project}/mapConfigs/{map_config}. This
  // field is required and cannot be omitted.
  string map_config = 2 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapConfig"
    }
  ];

  // Required. The StyleConfig resource name that is styling this
  // MapContextConfig. This field is required and cannot be omitted. Format:
  // projects/{project}/styleConfigs/{style_config}
  string style_config = 3 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/StyleConfig"
    }
  ];

  // Optional. The Dataset resource name that is associated with this
  // MapContextConfig. This field is optional and can be omitted. If omitted, no
  // datasets will be associated with the MapContextConfig. If a dataset is
  // specified, it will be applied to the MapContextConfig. Format:
  // projects/{project}/datasets/{dataset}
  repeated string dataset = 4 [
    (google.api.field_behavior) = OPTIONAL,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/Dataset"
    }
  ];

  // Optional. The user defined human readable name for this MapContextConfig.
  string alias = 5 [(google.api.field_behavior) = OPTIONAL];

  // Required. The map variants that this MapContextConfig can be applied to. If
  // empty, the MapContextConfig will be default applied to only the ROADMAP map
  // variant.
  repeated MapVariant map_variants = 6 [(google.api.field_behavior) = REQUIRED];

  // Output only. Denotes the creation time of the MapContextConfig. Output
  // only.
  google.protobuf.Timestamp create_time = 7
      [(google.api.field_behavior) = OUTPUT_ONLY];

  // Output only. Denotes the last update time of the MapContextConfig. Output
  // only.
  google.protobuf.Timestamp update_time = 8
      [(google.api.field_behavior) = OUTPUT_ONLY];
}

// Request to create a MapContextConfig.
message CreateMapContextConfigRequest {
  // Required. Parent MapConfig that will own the MapContextConfig.
  // Format: `projects/{project}/mapConfigs/{map_config}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapConfig"
    }
  ];

  // Required. The MapContextConfig to create.
  MapContextConfig map_context_config = 2
      [(google.api.field_behavior) = REQUIRED];
}

// Request to get a MapContextConfig.
message GetMapContextConfigRequest {
  // Required. Resource name of the MapContextConfig.
  // Format:
  // `projects/{project}/mapConfigs/{map_config}/mapContextConfigs/{map_context_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapContextConfig"
    }
  ];
}

// Request to list MapContextConfigs.
message ListMapContextConfigsRequest {
  // Required. Parent MapConfig that owns the MapContextConfigs.
  // Format: `projects/{project}/mapConfigs/{map_config}`
  string parent = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapConfig"
    }
  ];

  // Optional. The maximum number of MapContextConfigs to return. The service
  // may return fewer than this value. If unspecified, at most 50
  // MapContextConfigs will be returned. The maximum value is 1000; values above
  // 1000 will be coerced to 1000. CURRENTLY UNSUPPORTED.
  int32 page_size = 2 [(google.api.field_behavior) = OPTIONAL];

  // Optional. A page token, received from a previous `ListMapContextConfigs`
  // call. Provide this to retrieve the subsequent page.
  //
  // When paginating, all other parameters provided to `ListMapContextConfigs`
  // must match the call that provided the page token. CURRENTLY UNSUPPORTED.
  string page_token = 3 [(google.api.field_behavior) = OPTIONAL];
}

// Response to list MapContextConfigs.
message ListMapContextConfigsResponse {
  // The MapContextConfigs.
  repeated MapContextConfig map_context_configs = 1;

  // A token, which can be sent as `page_token` to retrieve the next page.
  // If this field is omitted, there are no subsequent pages.
  // CURRENTLY UNSUPPORTED.
  string next_page_token = 2;
}

// Request to update a MapContextConfig.
message UpdateMapContextConfigRequest {
  // Required. The MapContextConfig to update.
  //
  // The MapContextConfig's `name` field is used to identify the
  // MapContextConfig to update. Format:
  // `projects/{project}/mapConfigs/{map_config}/mapContextConfigs/{map_context_config}`
  MapContextConfig map_context_config = 1
      [(google.api.field_behavior) = REQUIRED];

  // Optional. The list of fields to update. If not specified, the
  // MapContextConfig will be updated in its entirety. Valid fields are:
  //
  // * `display_name`
  // * `alias`
  // * `map_variants`
  // * `style_config`
  // * `dataset`
  google.protobuf.FieldMask update_mask = 2
      [(google.api.field_behavior) = OPTIONAL];
}

// Request to delete a MapContextConfig.
message DeleteMapContextConfigRequest {
  // Required. Resource name of the MapContextConfig to delete.
  // Format:
  // `projects/{project}/mapConfigs/{map_config}/mapContextConfigs/{map_context_config}`
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "mapmanagement.googleapis.com/MapContextConfig"
    }
  ];
}
