// Copyright 2022 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.mapsplatformdatasets.v1alpha;

import "google/api/annotations.proto";
import "google/api/client.proto";
import "google/maps/mapsplatformdatasets/v1alpha/dataset.proto";
import "google/maps/mapsplatformdatasets/v1alpha/maps_platform_datasets.proto";
import "google/protobuf/empty.proto";

option cc_enable_arenas = true;
option csharp_namespace = "Google.Maps.MapsPlatformDatasets.V1Alpha";
option go_package = "cloud.google.com/go/maps/mapsplatformdatasets/apiv1alpha/mapsplatformdatasetspb;mapsplatformdatasetspb";
option java_multiple_files = true;
option java_outer_classname = "MapsPlatformDatasetsV1AlphaServiceProto";
option java_package = "com.google.maps.mapsplatformdatasets.v1alpha";
option objc_class_prefix = "MDV1A";
option php_namespace = "Google\\Maps\\MapsPlatformDatasets\\V1alpha";

// Service definition for the Maps Platform Datasets API.
service MapsPlatformDatasetsV1Alpha {
  option (google.api.default_host) = "mapsplatformdatasets.googleapis.com";
  option (google.api.oauth_scopes) = "https://www.googleapis.com/auth/cloud-platform";

  // Create a new dataset for the specified project.
  rpc CreateDataset(CreateDatasetRequest) returns (Dataset) {
    option (google.api.http) = {
      post: "/v1alpha/{parent=projects/*}/datasets"
      body: "dataset"
    };
    option (google.api.method_signature) = "parent,dataset";
  }

  // Update the metadata for the dataset. To update the data use: UploadDataset.
  rpc UpdateDatasetMetadata(UpdateDatasetMetadataRequest) returns (Dataset) {
    option (google.api.http) = {
      patch: "/v1alpha/{dataset.name=projects/*/datasets/*}"
      body: "dataset"
    };
    option (google.api.method_signature) = "dataset,update_mask";
  }

  // Get the published or latest version of the dataset.
  rpc GetDataset(GetDatasetRequest) returns (Dataset) {
    option (google.api.http) = {
      get: "/v1alpha/{name=projects/*/datasets/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // List all the versions of a dataset.
  rpc ListDatasetVersions(ListDatasetVersionsRequest) returns (ListDatasetVersionsResponse) {
    option (google.api.http) = {
      get: "/v1alpha/{name=projects/*/datasets/*}:listVersions"
    };
    option (google.api.method_signature) = "name";
  }

  // List all the datasets for the specified project.
  rpc ListDatasets(ListDatasetsRequest) returns (ListDatasetsResponse) {
    option (google.api.http) = {
      get: "/v1alpha/{parent=projects/*}/datasets"
    };
    option (google.api.method_signature) = "parent";
  }

  // Delete the specified dataset and optionally all its corresponding
  // versions.
  rpc DeleteDataset(DeleteDatasetRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v1alpha/{name=projects/*/datasets/*}"
    };
    option (google.api.method_signature) = "name";
  }

  // Delete a specific version of the dataset.
  rpc DeleteDatasetVersion(DeleteDatasetVersionRequest) returns (google.protobuf.Empty) {
    option (google.api.http) = {
      delete: "/v1alpha/{name=projects/*/datasets/*}:deleteVersion"
    };
    option (google.api.method_signature) = "name";
  }
}
