syntax = "proto3";

package global.common.v1;

import "datatype/v1/enums.proto";
import "global/common/v1/service_plan.proto";
import "google/api/field_behavior.proto";

// Available feature for a cluster
enum AvailableFeature {
  AVAILABLE_FEATURE_UNSPECIFIED = 0;

  DISABLE_PUBLIC_LB = 1;
  DELEGATE_USER = 2;
  PRIVATELINK = 3;
  VECTOR_TYPE = 4;
}

message CloudProvider {
  Name id = 1 [(google.api.field_behavior) = REQUIRED];
  string display_name = 2 [(google.api.field_behavior) = REQUIRED];
  State state = 3 [(google.api.field_behavior) = OPTIONAL];
  repeated Region regions = 4;
  bool is_public = 5;
  ServicePlan service_plan = 6 [deprecated = true];
  repeated ServicePlan service_plans = 7;

  // Refer to terraform provider name: https://registry.terraform.io/browse/providers.
  enum Name {
    NAME_UNSPECIFIED = 0;

    AWS = 1 [(datatype.v1.name) = "aws"];
    GCP = 2 [(datatype.v1.name) = "gcp"];
    AZURE = 3 [(datatype.v1.name) = "azure"];
    ALICLOUD = 4 [(datatype.v1.name) = "alicloud"];
  }

  enum State {
    STATE_UNSPECIFIED = 0;

    ACTIVE = 1 [(datatype.v1.name) = "active"];
    INACTIVE = 2 [(datatype.v1.name) = "inactive"];
  }
}

message Region {
  enum EngineType {
    ENGINE_TYPE_UNSPECIFIED = 0;

    MYSQL_COMPATIBLE = 1;
    POSTGRESQL_COMPATIBLE = 2;
  }

  Name id = 1 [(google.api.field_behavior) = REQUIRED];
  CloudProvider.Name cloud_provider_id = 2 [(google.api.field_behavior) = REQUIRED];
  string display_name = 3 [(google.api.field_behavior) = REQUIRED]; // display name of the region
  repeated uint64 opened_tenant_ids = 4; // if public is false, only these tenants can use this region
  int32 sort_priority = 5; // not used now
  string area = 6; // for example: Europe, Americas
  string country_code = 7; // such as: CN, US
  State state = 8 [(google.api.field_behavior) = OPTIONAL]; // region state, if state is inactive, the region is not available, can not use it
  bool is_public = 9; // whether the region is public, if true, all organizations can use it
  string default_backup_time = 10; // cluster's default auto backup time in this region(dataflow-service), such as "10:00"
  string service_address = 11; // regional service address
  string logical_name = 12; // logic region name, such as "cn-north-1" , if local name is not equal to id , is a byoc region and only set public to false

  ServicePlan service_plan = 13; // service plan of the region, if not set, use default service plan
  optional string shared_bucket_url = 14; // shared bucket url of the region, if not set, keep empty
  optional RegionOpsAuditLogSetting ops_audit_log_setting = 15; // ops audit log setting of the region

  repeated RegionWhiteList region_white_lists = 16;
  EngineType engine_type = 17;
  optional RegionSys9Config sys9_config = 18;
  enum State {
    STATE_UNSPECIFIED = 0;

    ACTIVE = 1 [(datatype.v1.name) = "active"];
    INACTIVE = 2 [(datatype.v1.name) = "inactive"];
  }

  // Refer to:
  //   - AWS: https://docs.aws.amazon.com/general/latest/gr/rande.html#regional-endpoints.
  //   - GCP: https://console.cloud.google.com/compute/zones
  //   - Azure: https://gist.github.com/ausfestivus/04e55c7d80229069bf3bc75870630ec8
  enum Name {
    NAME_UNSPECIFIED = 0;

    // AWS.
    AWS_US_EAST_2 = 1 [(datatype.v1.name) = "us-east-2"];
    AWS_US_EAST_1 = 2 [(datatype.v1.name) = "us-east-1"];
    AWS_US_WEST_1 = 3 [(datatype.v1.name) = "us-west-1"];
    AWS_US_WEST_2 = 4 [(datatype.v1.name) = "us-west-2"];
    AWS_AF_SOUTH_1 = 5 [(datatype.v1.name) = "af-south-1"];
    AWS_AP_EAST_1 = 6 [(datatype.v1.name) = "ap-east-1"];
    AWS_AP_SOUTH_2 = 7 [(datatype.v1.name) = "ap-south-2"];
    AWS_AP_SOUTHEAST_3 = 8 [(datatype.v1.name) = "ap-southeast-3"];
    AWS_AP_SOUTHEAST_4 = 9 [(datatype.v1.name) = "ap-southeast-4"];
    AWS_AP_SOUTH_1 = 10 [(datatype.v1.name) = "ap-south-1"];
    AWS_AP_NORTHEAST_3 = 11 [(datatype.v1.name) = "ap-northeast-3"];
    AWS_AP_NORTHEAST_2 = 12 [(datatype.v1.name) = "ap-northeast-2"];
    AWS_AP_SOUTHEAST_1 = 13 [(datatype.v1.name) = "ap-southeast-1"];
    AWS_AP_SOUTHEAST_2 = 14 [(datatype.v1.name) = "ap-southeast-2"];
    AWS_AP_NORTHEAST_1 = 15 [(datatype.v1.name) = "ap-northeast-1"];
    AWS_CA_CENTRAL_1 = 16 [(datatype.v1.name) = "ca-central-1"];
    AWS_CA_WEST_1 = 17 [(datatype.v1.name) = "ca-west-1"];
    AWS_EU_CENTRAL_1 = 18 [(datatype.v1.name) = "eu-central-1"];
    AWS_EU_WEST_1 = 19 [(datatype.v1.name) = "eu-west-1"];
    AWS_EU_WEST_2 = 20 [(datatype.v1.name) = "eu-west-2"];
    AWS_EU_SOUTH_1 = 21 [(datatype.v1.name) = "eu-south-1"];
    AWS_EU_WEST_3 = 22 [(datatype.v1.name) = "eu-west-3"];
    AWS_EU_SOUTH_2 = 23 [(datatype.v1.name) = "eu-south-2"];
    AWS_EU_NORTH_1 = 24 [(datatype.v1.name) = "eu-north-1"];
    AWS_EU_CENTRAL_2 = 25 [(datatype.v1.name) = "eu-central-2"];
    AWS_IL_CENTRAL_1 = 26 [(datatype.v1.name) = "il-central-1"];
    AWS_ME_SOUTH_1 = 27 [(datatype.v1.name) = "me-south-1"];
    AWS_ME_CENTRAL_1 = 28 [(datatype.v1.name) = "me-central-1"];
    AWS_SA_EAST_1 = 29 [(datatype.v1.name) = "sa-east-1"];
    AWS_AP_SOUTHEAST_5 = 30 [(datatype.v1.name) = "ap-southeast-5"];
    AWS_AP_SOUTHEAST_6 = 31 [(datatype.v1.name) = "ap-southeast-6"];
    AWS_AP_SOUTHEAST_7 = 32 [(datatype.v1.name) = "ap-southeast-7"];
    AWS_MX_CENTRAL_1 = 33 [(datatype.v1.name) = "mx-central-1"];

    reserved 34 to 50;

    // GCP.
    GCP_ASIA_EAST1 = 51 [(datatype.v1.name) = "asia-east1"];
    GCP_ASIA_EAST2 = 52 [(datatype.v1.name) = "asia-east2"];
    GCP_ASIA_NORTHEAST1 = 53 [(datatype.v1.name) = "asia-northeast1"];
    GCP_ASIA_NORTHEAST2 = 54 [(datatype.v1.name) = "asia-northeast2"];
    GCP_ASIA_NORTHEAST3 = 55 [(datatype.v1.name) = "asia-northeast3"];
    GCP_ASIA_SOUTH1 = 56 [(datatype.v1.name) = "asia-south1"];
    GCP_ASIA_SOUTH2 = 57 [(datatype.v1.name) = "asia-south2"];
    GCP_ASIA_SOUTHEAST1 = 58 [(datatype.v1.name) = "asia-southeast1"];
    GCP_ASIA_SOUTHEAST2 = 59 [(datatype.v1.name) = "asia-southeast2"];
    GCP_AUSTRALIA_SOUTHEAST1 = 60 [(datatype.v1.name) = "australia-southeast1"];
    GCP_AUSTRALIA_SOUTHEAST2 = 61 [(datatype.v1.name) = "australia-southeast2"];
    GCP_EUROPE_CENTRAL2 = 62 [(datatype.v1.name) = "europe-central2"];
    GCP_EUROPE_NORTH1 = 63 [(datatype.v1.name) = "europe-north1"];
    GCP_EUROPE_SOUTHWEST1 = 64 [(datatype.v1.name) = "europe-southwest1"];
    GCP_EUROPE_WEST1 = 65 [(datatype.v1.name) = "europe-west1"];
    GCP_EUROPE_WEST10 = 66 [(datatype.v1.name) = "europe-west10"];
    GCP_EUROPE_WEST12 = 67 [(datatype.v1.name) = "europe-west12"];
    GCP_EUROPE_WEST2 = 68 [(datatype.v1.name) = "europe-west2"];
    GCP_EUROPE_WEST3 = 69 [(datatype.v1.name) = "europe-west3"];
    GCP_EUROPE_WEST4 = 70 [(datatype.v1.name) = "europe-west4"];
    GCP_EUROPE_WEST6 = 71 [(datatype.v1.name) = "europe-west6"];
    GCP_EUROPE_WEST8 = 72 [(datatype.v1.name) = "europe-west8"];
    GCP_EUROPE_WEST9 = 73 [(datatype.v1.name) = "europe-west9"];
    GCP_ME_CENTRAL1 = 74 [(datatype.v1.name) = "me-central1"];
    GCP_ME_CENTRAL2 = 75 [(datatype.v1.name) = "me-central2"];
    GCP_ME_WEST1 = 76 [(datatype.v1.name) = "me-west1"];
    GCP_NORTHAMERICA_NORTHEAST1 = 77 [(datatype.v1.name) = "northamerica-northeast1"];
    GCP_NORTHAMERICA_NORTHEAST2 = 78 [(datatype.v1.name) = "northamerica-northeast2"];
    GCP_SOUTHAMERICA_EAST1 = 79 [(datatype.v1.name) = "southamerica-east1"];
    GCP_SOUTHAMERICA_WEST1 = 80 [(datatype.v1.name) = "southamerica-west1"];
    GCP_US_CENTRAL1 = 81 [(datatype.v1.name) = "us-central1"];
    GCP_US_EAST1 = 82 [(datatype.v1.name) = "us-east1"];
    GCP_US_EAST4 = 83 [(datatype.v1.name) = "us-east4"];
    GCP_US_EAST5 = 84 [(datatype.v1.name) = "us-east5"];
    GCP_US_SOUTH1 = 85 [(datatype.v1.name) = "us-south1"];
    GCP_US_WEST1 = 86 [(datatype.v1.name) = "us-west1"];
    GCP_US_WEST2 = 87 [(datatype.v1.name) = "us-west2"];
    GCP_US_WEST3 = 88 [(datatype.v1.name) = "us-west3"];
    GCP_US_WEST4 = 89 [(datatype.v1.name) = "us-west4"];
    reserved 90 to 100;

    // Azure
    AZURE_EASTUS = 101 [(datatype.v1.name) = "eastus"];
    AZURE_SOUTHCENTRALUS = 102 [(datatype.v1.name) = "southcentralus"];
    AZURE_WESTUS2 = 103 [(datatype.v1.name) = "westus2"];
    AZURE_WESTUS3 = 104 [(datatype.v1.name) = "westus3"];
    AZURE_AUSTRALIAEAST = 105 [(datatype.v1.name) = "australiaeast"];
    AZURE_SOUTHEASTASIA = 106 [(datatype.v1.name) = "southeastasia"];
    AZURE_NORTHEUROPE = 107 [(datatype.v1.name) = "northeurope"];
    AZURE_SWEDENCENTRAL = 108 [(datatype.v1.name) = "swedencentral"];
    AZURE_UKSOUTH = 109 [(datatype.v1.name) = "uksouth"];
    AZURE_WESTEUROPE = 110 [(datatype.v1.name) = "westeurope"];
    AZURE_CENTRALUS = 111 [(datatype.v1.name) = "centralus"];
    AZURE_SOUTHAFRICANORTH = 112 [(datatype.v1.name) = "southafricanorth"];
    AZURE_CENTRALINDIA = 113 [(datatype.v1.name) = "centralindia"];
    AZURE_EASTASIA = 114 [(datatype.v1.name) = "eastasia"];
    AZURE_JAPANEAST = 115 [(datatype.v1.name) = "japaneast"];
    AZURE_KOREACENTRAL = 116 [(datatype.v1.name) = "koreacentral"];
    AZURE_CANADACENTRAL = 117 [(datatype.v1.name) = "canadacentral"];
    AZURE_FRANCECENTRAL = 118 [(datatype.v1.name) = "francecentral"];
    AZURE_GERMANYWESTCENTRAL = 119 [(datatype.v1.name) = "germanywestcentral"];
    AZURE_ITALYNORTH = 120 [(datatype.v1.name) = "italynorth"];
    AZURE_NORWAYEAST = 121 [(datatype.v1.name) = "norwayeast"];
    AZURE_POLANDCENTRAL = 122 [(datatype.v1.name) = "polandcentral"];
    AZURE_SPAINCENTRAL = 123 [(datatype.v1.name) = "spaincentral"];
    AZURE_SWITZERLANDNORTH = 124 [(datatype.v1.name) = "switzerlandnorth"];
    AZURE_MEXICOCENTRAL = 125 [(datatype.v1.name) = "mexicocentral"];
    AZURE_UAENORTH = 126 [(datatype.v1.name) = "uaenorth"];
    AZURE_BRAZILSOUTH = 127 [(datatype.v1.name) = "brazilsouth"];
    AZURE_ISRAELCENTRAL = 128 [(datatype.v1.name) = "israelcentral"];
    AZURE_QATARCENTRAL = 129 [(datatype.v1.name) = "qatarcentral"];
    AZURE_CENTRALUSSTAGE = 130 [(datatype.v1.name) = "centralusstage"];
    AZURE_EASTUSSTAGE = 131 [(datatype.v1.name) = "eastusstage"];
    AZURE_EASTUS2STAGE = 132 [(datatype.v1.name) = "eastus2stage"];
    AZURE_NORTHCENTRALUSSTAGE = 133 [(datatype.v1.name) = "northcentralusstage"];
    AZURE_SOUTHCENTRALUSSTAGE = 134 [(datatype.v1.name) = "southcentralusstage"];
    AZURE_WESTUSSTAGE = 135 [(datatype.v1.name) = "westusstage"];
    AZURE_WESTUS2STAGE = 136 [(datatype.v1.name) = "westus2stage"];
    AZURE_ASIA = 137 [(datatype.v1.name) = "asia"];
    AZURE_ASIAPACIFIC = 138 [(datatype.v1.name) = "asiapacific"];
    AZURE_AUSTRALIA = 139 [(datatype.v1.name) = "australia"];
    AZURE_BRAZIL = 140 [(datatype.v1.name) = "brazil"];
    AZURE_CANADA = 141 [(datatype.v1.name) = "canada"];
    AZURE_EUROPE = 142 [(datatype.v1.name) = "europe"];
    AZURE_FRANCE = 143 [(datatype.v1.name) = "france"];
    AZURE_GERMANY = 144 [(datatype.v1.name) = "germany"];
    AZURE_GLOBAL = 145 [(datatype.v1.name) = "global"];
    AZURE_INDIA = 146 [(datatype.v1.name) = "india"];
    AZURE_ISRAEL = 147 [(datatype.v1.name) = "israel"];
    AZURE_ITALY = 148 [(datatype.v1.name) = "italy"];
    AZURE_JAPAN = 149 [(datatype.v1.name) = "japan"];
    AZURE_KOREA = 150 [(datatype.v1.name) = "korea"];
    AZURE_NEWZEALAND = 151 [(datatype.v1.name) = "newzealand"];
    AZURE_NORWAY = 152 [(datatype.v1.name) = "norway"];
    AZURE_POLAND = 153 [(datatype.v1.name) = "poland"];
    AZURE_QATAR = 154 [(datatype.v1.name) = "qatar"];
    AZURE_SINGAPORE = 155 [(datatype.v1.name) = "singapore"];
    AZURE_SOUTHAFRICA = 156 [(datatype.v1.name) = "southafrica"];
    AZURE_SWEDEN = 157 [(datatype.v1.name) = "sweden"];
    AZURE_SWITZERLAND = 158 [(datatype.v1.name) = "switzerland"];
    AZURE_UAE = 159 [(datatype.v1.name) = "uae"];
    AZURE_UK = 160 [(datatype.v1.name) = "uk"];
    AZURE_UNITEDSTATES = 161 [(datatype.v1.name) = "unitedstates"];
    AZURE_UNITEDSTATESEUAP = 162 [(datatype.v1.name) = "unitedstateseuap"];
    AZURE_EASTASIASTAGE = 163 [(datatype.v1.name) = "eastasiastage"];
    AZURE_SOUTHEASTASIASTAGE = 164 [(datatype.v1.name) = "southeastasiastage"];
    AZURE_BRAZILUS = 165 [(datatype.v1.name) = "brazilus"];
    AZURE_EASTUS2 = 166 [(datatype.v1.name) = "eastus2"];
    AZURE_EASTUSSTG = 167 [(datatype.v1.name) = "eastusstg"];
    AZURE_NORTHCENTRALUS = 168 [(datatype.v1.name) = "northcentralus"];
    AZURE_WESTUS = 169 [(datatype.v1.name) = "westus"];
    AZURE_JAPANWEST = 170 [(datatype.v1.name) = "japanwest"];
    AZURE_JIOINDIAWEST = 171 [(datatype.v1.name) = "jioindiawest"];
    AZURE_CENTRALUSEUAP = 172 [(datatype.v1.name) = "centraluseuap"];
    AZURE_EASTUS2EUAP = 173 [(datatype.v1.name) = "eastus2euap"];
    AZURE_WESTCENTRALUS = 174 [(datatype.v1.name) = "westcentralus"];
    AZURE_SOUTHAFRICAWEST = 175 [(datatype.v1.name) = "southafricawest"];
    AZURE_AUSTRALIACENTRAL = 176 [(datatype.v1.name) = "australiacentral"];
    AZURE_AUSTRALIACENTRAL2 = 177 [(datatype.v1.name) = "australiacentral2"];
    AZURE_AUSTRALIASOUTHEAST = 178 [(datatype.v1.name) = "australiasoutheast"];
    AZURE_JIOINDIACENTRAL = 179 [(datatype.v1.name) = "jioindiacentral"];
    AZURE_KOREASOUTH = 180 [(datatype.v1.name) = "koreasouth"];
    AZURE_SOUTHINDIA = 181 [(datatype.v1.name) = "southindia"];
    AZURE_WESTINDIA = 182 [(datatype.v1.name) = "westindia"];
    AZURE_CANADAEAST = 183 [(datatype.v1.name) = "canadaeast"];
    AZURE_FRANCESOUTH = 184 [(datatype.v1.name) = "francesouth"];
    AZURE_GERMANYNORTH = 185 [(datatype.v1.name) = "germanynorth"];
    AZURE_NORWAYWEST = 186 [(datatype.v1.name) = "norwaywest"];
    AZURE_SWITZERLANDWEST = 187 [(datatype.v1.name) = "switzerlandwest"];
    AZURE_UKWEST = 188 [(datatype.v1.name) = "ukwest"];
    AZURE_UAECENTRAL = 189 [(datatype.v1.name) = "uaecentral"];
    AZURE_BRAZILSOUTHEAST = 190 [(datatype.v1.name) = "brazilsoutheast"];
    reserved 191 to 200;

    // AliCloud
    ALICLOUD_AP_SOUTHEAST_1 = 201 [(datatype.v1.name) = "ap-southeast-1"];
    ALICLOUD_AP_NORTHEAST_1 = 202 [(datatype.v1.name) = "ap-northeast-1"];
    ALICLOUD_AP_NORTHEAST_2 = 203 [(datatype.v1.name) = "ap-northeast-2"];
    ALICLOUD_AP_SOUTHEAST_3 = 204 [(datatype.v1.name) = "ap-southeast-3"];
    ALICLOUD_AP_SOUTHEAST_5 = 205 [(datatype.v1.name) = "ap-southeast-5"];
    ALICLOUD_AP_SOUTHEAST_6 = 206 [(datatype.v1.name) = "ap-southeast-6"];
    ALICLOUD_AP_SOUTHEAST_7 = 207 [(datatype.v1.name) = "ap-southeast-7"];
    ALICLOUD_NA_SOUTH_1 = 208 [(datatype.v1.name) = "na-south-1"];
    ALICLOUD_US_WEST_1 = 209 [(datatype.v1.name) = "us-west-1"];
    ALICLOUD_US_EAST_1 = 210 [(datatype.v1.name) = "us-east-1"];
    ALICLOUD_EU_CENTRAL_1 = 211 [(datatype.v1.name) = "eu-central-1"];
    ALICLOUD_EU_WEST_1 = 212 [(datatype.v1.name) = "eu-west-1"];
    ALICLOUD_ME_EAST_1 = 213 [(datatype.v1.name) = "me-east-1"];
    ALICLOUD_ME_CENTRAL_1 = 214 [(datatype.v1.name) = "me-central-1"];
    ALICLOUD_CN_HONGKONG = 215 [(datatype.v1.name) = "cn-hongkong"];
  }
}

message RegionSys9Config {
  string oem_profile_ref = 1;
  string auth_mode = 2;
  uint32 token_ttl_sec = 3;
  uint32 session_refresh_before_sec = 4;
  string retry_policy_ref = 5;
}

message RegionWhiteList {
  ServicePlan service_plan = 1 [(google.api.field_behavior) = REQUIRED];
  bool is_public = 2 [(google.api.field_behavior) = OPTIONAL];
  repeated uint64 opened_tenant_ids = 4 [(google.api.field_behavior) = OPTIONAL];
}

message RegionOpsAuditLogSetting {
  bool enabled = 1 [(google.api.field_behavior) = REQUIRED];
  LogLocation log_location = 2 [(google.api.field_behavior) = OPTIONAL];
  LogRotation log_rotation = 3 [(google.api.field_behavior) = OPTIONAL];

  message LogLocation {
    Type type = 1 [(google.api.field_behavior) = REQUIRED];
    string bucket_uri = 2 [(google.api.field_behavior) = REQUIRED];
    string role_arn = 3 [(google.api.field_behavior) = REQUIRED];
    string external_id = 4 [(google.api.field_behavior) = REQUIRED];
    string account_id = 5 [(google.api.field_behavior) = REQUIRED];
  }

  message LogRotation {
    uint64 file_size_limit_in_mb = 1 [(google.api.field_behavior) = REQUIRED];
    uint64 rotation_interval_in_min = 2 [(google.api.field_behavior) = REQUIRED];
  }

  enum Type {
    TYPE_UNSPECIFIED = 0;
    TYPE_STANDARD = 1;
    TYPE_CUSTOMIZED = 2;
  }
}
