// Copyright 2023 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.devtools.artifactregistry.v1;

import "google/api/field_behavior.proto";
import "google/api/resource.proto";
import "google/protobuf/field_mask.proto";

option csharp_namespace = "Google.Cloud.ArtifactRegistry.V1";
option go_package = "cloud.google.com/go/artifactregistry/apiv1/artifactregistrypb;artifactregistrypb";
option java_multiple_files = true;
option java_outer_classname = "SettingsProto";
option java_package = "com.google.devtools.artifactregistry.v1";
option php_namespace = "Google\\Cloud\\ArtifactRegistry\\V1";
option ruby_package = "Google::Cloud::ArtifactRegistry::V1";

// The Artifact Registry settings that apply to a Project.
message ProjectSettings {
  option (google.api.resource) = {
    type: "artifactregistry.googleapis.com/ProjectSettings"
    pattern: "projects/{project}/projectSettings"
  };

  // The possible redirection states for legacy repositories.
  enum RedirectionState {
    // No redirection status has been set.
    REDIRECTION_STATE_UNSPECIFIED = 0;

    // Redirection is disabled.
    REDIRECTION_FROM_GCR_IO_DISABLED = 1;

    // Redirection is enabled.
    REDIRECTION_FROM_GCR_IO_ENABLED = 2;

    // Redirection is enabled, and has been finalized so cannot be reverted.
    REDIRECTION_FROM_GCR_IO_FINALIZED = 3 [deprecated = true];
  }

  // The name of the project's settings.
  //
  // Always of the form:
  // projects/{project-id}/projectSettings
  //
  // In update request: never set
  // In response: always set
  string name = 1;

  // The redirection state of the legacy repositories in this project.
  RedirectionState legacy_redirection_state = 2;
}

// Gets the redirection status for a project.
message GetProjectSettingsRequest {
  // Required. The name of the projectSettings resource.
  string name = 1 [
    (google.api.field_behavior) = REQUIRED,
    (google.api.resource_reference) = {
      type: "artifactregistry.googleapis.com/ProjectSettings"
    }
  ];
}

// Sets the settings of the project.
message UpdateProjectSettingsRequest {
  // The project settings.
  ProjectSettings project_settings = 2;

  // Field mask to support partial updates.
  google.protobuf.FieldMask update_mask = 3;
}
