syntax = "proto3";

package tidb_mgmt_service.v1;

import "global/common/v1/resources.proto";
import "global/common/v1/service_plan.proto";
import "global/nextgen/v1/resource_pool.proto";
import "google/api/annotations.proto";
import "google/api/field_behavior.proto";
import "protoc-gen-openapiv2/options/annotations.proto";

/**
   All APIs here are for global control plane **internal** use only.
*/

option (grpc.gateway.protoc_gen_openapiv2.options.openapiv2_swagger) = {
  swagger: "2.0"
  host: ""
  base_path: "/inner/mgmt/v1"
  info: {
    version: "v1"
    title: "Control Plane Internal API"
    description: "Control Plane Internal API."
  }
  schemes: HTTPS
};

service ResourcePoolService {
  rpc CreateResourcePool(global.nextgen.v1.CreateResourcePoolRequest) returns (global.nextgen.v1.ResourcePoolProfile) {
    option (google.api.http) = {
      post: "/resource_pools"
      body: "*"
    };
  }

  rpc ListResourcePools(global.nextgen.v1.ListResourcePoolsRequest) returns (global.nextgen.v1.ListResourcePoolsResponse) {
    option (google.api.http) = {get: "/resource_pools"};
  }

  rpc UpdateResourcePoolName(global.nextgen.v1.UpdateResourcePoolNameRequest) returns (global.nextgen.v1.ResourcePool) {
    option (google.api.http) = {
      patch: "/resource_pools/{resource_pool_id}:updateName"
      body: "*"
    };
  }

  rpc UpdateResourcePoolInstanceLimit(global.nextgen.v1.UpdateResourcePoolInstanceLimitRequest) returns (global.nextgen.v1.ResourcePool) {
    option (google.api.http) = {
      patch: "/resource_pools/{resource_pool_id}:updateInstanceLimit"
      body: "*"
    };
  }

  rpc GetResourcePool(global.nextgen.v1.GetResourcePoolRequest) returns (global.nextgen.v1.ResourcePoolProfile) {
    option (google.api.http) = {get: "/resource_pools/{resource_pool_id}"};
  }

  rpc DeleteResourcePool(global.nextgen.v1.DeleteResourcePoolRequest) returns (global.nextgen.v1.ResourcePool) {
    option (google.api.http) = {delete: "/resource_pools/{resource_pool_id}"};
  }

  rpc ListOrgResourcePools(ListOrgResourcePoolsRequest) returns (global.nextgen.v1.ListOwnerResourcePoolsResponse) {
    option (google.api.http) = {get: "/{organization_id}/resource_pools"};
  }

  rpc UpdateOrgDefaultResourcePool(UpdateOrgDefaultResourcePoolRequest) returns (global.nextgen.v1.ResourcePoolStrategy) {
    option (google.api.http) = {
      patch: "/{organization_id}/resource_pools/strategy"
      body: "*"
    };
  }

  rpc PauseResourcePool(global.nextgen.v1.PauseResourcePoolRequest) returns (global.nextgen.v1.PauseResourcePoolResponse) {
    option (google.api.http) = {
      post: "/resource_pools/{resource_pool_id}:pause"
      body: "*"
    };
  }

  rpc ResumeResourcePool(global.nextgen.v1.ResumeResourcePoolRequest) returns (global.nextgen.v1.ResumeResourcePoolResponse) {
    option (google.api.http) = {
      post: "/resource_pools/{resource_pool_id}:resume"
      body: "*"
    };
  }

  rpc GetResourcePoolPauseResumeOperation(global.nextgen.v1.GetResourcePoolPauseResumeOperationRequest) returns (global.nextgen.v1.ResourcePoolPauseResumeOperation) {
    option (google.api.http) = {get: "/resource_pools/{resource_pool_id}/pauseResumeOperations/{operation_id}"};
  }
}

message ListOrgResourcePoolsRequest {
  global.common.v1.CloudProvider.Name provider = 1 [(google.api.field_behavior) = OPTIONAL];
  global.common.v1.Region.Name region = 2 [(google.api.field_behavior) = OPTIONAL];
  uint64 organization_id = 3 [(google.api.field_behavior) = REQUIRED];
  global.common.v1.ServicePlan service_plan = 4 [(google.api.field_behavior) = OPTIONAL];
}

message UpdateOrgDefaultResourcePoolRequest {
  uint64 organization_id = 2 [(google.api.field_behavior) = REQUIRED];
  uint64 default_resource_pool_id = 3 [(google.api.field_behavior) = REQUIRED];
  global.common.v1.CloudProvider.Name provider_id = 4 [(google.api.field_behavior) = REQUIRED];
  global.common.v1.Region.Name region_id = 5 [(google.api.field_behavior) = REQUIRED];
}
