// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file or at
// https://developers.google.com/open-source/licenses/bsd

// This file defines protobufs for issues and related business
// objects, e.g., field values, comments, and attachments.

syntax = "proto3";

package monorail.v3;

option go_package = "infra/monorailv2/api/v3/api_proto";

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

// Represents a comment and any associated changes to an Issue.
//
// Comments cannot be Created or Updated through standard methods. The
// OUTPUT_ONLY annotations here indicate fields that would never be provided
// by the user even if these methods were made available.
// Next available tag: 11.
message Comment {

  // The type of comment.
  // Next available tag: 9
  enum Type {
    // The default comment type. Used if type is omitted.
    UNSPECIFIED = 0;
    // A standard comment on an issue.
    COMMENT = 1;
    // A comment representing a new description for the issue.
    DESCRIPTION = 2;
  }

  // A file attached to a comment.
  // Next available tag: 8
  message Attachment {
    // The name of the attached file.
    string filename = 1;
    // It is possible for attachments to be deleted (and undeleted) by the
    // uploader. The name of deleted attachments are still shown, but the
    // content is not available.
    IssueContentState state = 2;
    // Size of the attached file in bytes.
    uint64 size = 3;
    // The type of content contained in the file, using the IANA's media type
    // https://www.iana.org/assignments/media-types/media-types.xhtml.
    string media_type = 4;
    // The URI used for a preview of the attachment (when relelvant).
    string thumbnail_uri = 5;
    // The URI used to view the content of the attachment.
    string view_uri = 6;
    // The URI used to download the content of the attachment.
    string download_uri = 7;
  }

  // This message is only suitable for displaying the amendment to users.
  // We don't currently offer structured amendments that client code can
  // reason about, field names can be ambiguous, and we don't have
  // old_value for most changes.
  // Next available tag: 4
  message Amendment {
    // This may be the name of a built-in or custom field, or relative to
    // an approval field name.
    string field_name = 1;
    // This may be a new value that overwrote the old value, e.g., "Assigned",
    // or it may be a space-separated list of changes, e.g., "Size-L -Size-S".
    string new_or_delta_value = 2;
    // old_value is only used when the user changes the summary.
    string old_value = 3;
  }

  option (google.api.resource) = {
    type: "api.crbug.com/Comment"
    pattern: "projects/{project}/issues/{issue}/comments/{comment}"
  };

  // Resource name of the comment.
  string name = 1;
  // The state of the comment.
  IssueContentState state = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  // The type of comment.
  Type type = 3;
  // The text of the comment.
  string content = 4;
  // Resource name of the author of the comment.
  string commenter = 5 [
    (google.api.resource_reference) = { type: "api.crbug.com/User" },
    (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // The time this comment was added to the Issue.
  google.protobuf.Timestamp create_time = 6
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // Optional string full text of an email that caused this comment to be added.
  string inbound_message = 7 [(google.api.field_behavior) = OUTPUT_ONLY];
  // The approval this comment is associated with, if applicable.
  string approval = 8
      [(google.api.resource_reference) = { type: "api.crbug.com/ApprovalValue" }];
  // Any changes made to the issue in association with this comment.
  repeated Amendment amendments = 9 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Any attachments uploaded in association with this comment.
  repeated Attachment attachments = 10
      [(google.api.field_behavior) = OUTPUT_ONLY];
}


// Many values on an issue can be set either explicitly or by a rule.
//
// Note: Though Derivations are used as OUTPUT_ONLY, values including them
// will still be ingested even though the Derivation is ignored.
//
// Next available tag: 3
enum Derivation {
  // The default derivation. This value is used if the derivation is omitted.
  DERIVATION_UNSPECIFIED = 0;
  // The value was explicitly set on the issue.
  EXPLICIT = 1;
  // Value was auto-applied to the issue based on a project's rule. See
  // monorail/doc/userguide/project-owners.md#how-to-configure-filter-rules
  RULE = 2;
}


// A value of a custom field for an issue.
// Next available tag: 5
message FieldValue {
  // The project-defined field associated with this value
  string field = 1 [
      (google.api.resource_reference) = { type: "api.crbug.com/FieldDef" }];
  // The value associated with the field.
  // Mapping of field types to string value:
  // ENUM_TYPE(int) => str(value)
  // INT_TYPE(int) => str(value)
  // STR_TYPE(str) => value
  // USER_TYPE(int) => the user's resource name
  // DATE_TYPE(int) => str(int) representing time in seconds since epoch
  // URL_TYPE(str) => value
  string value = 2;
  // How the value was derived.
  Derivation derivation = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Issues with phase-specific fields can have values for each phase.
  string phase = 4;
}

// Documents and tracks a bug, task, or feature request within a Project.
// Next available tag: 23
message Issue {
  option (google.api.resource) = {
    type: "api.crbug.com/Issue"
    pattern: "projects/{project}/issues/{issue}"
  };

  // A possibly rule-derived component for the issue.
  // Next available tag: 3
  message ComponentValue {
    // AIP resource name of the component.
    string component = 1 [
      (google.api.resource_reference) = { type: "api.crbug.com/ComponentDef" }
    ];
    // How the component was derived.
    Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // A possibly rule-derived label for an issue.
  // Next available tag: 3
  message LabelValue {
    // The label.
    string label = 1;
    // How the label was derived.
    Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // A possibly rule-derived status for an issue.
  // Next available tag: 3
  message StatusValue {
    // The status of the issue. Note that in rare cases this can be a
    // value not defined in the project's StatusDefs (e.g. if the issue
    // was moved from another project).
    string status = 1;
    // How the status was derived.
    Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // A possibly rule-derived user value on an issue.
  // Next available tag: 3
  message UserValue {
    // The user.
    string user = 1
        [(google.api.resource_reference) = { type: "api.crbug.com/User" }];
    // How the user value was derived.
    Derivation derivation = 2 [(google.api.field_behavior) = OUTPUT_ONLY];
  }

  // Resource name of the issue.
  string name = 1;
  // A brief summary of the issue. Generally displayed as a user-facing title.
  // TODO(monorail:6988): The UI limits summary length while the backend does
  // not. Resolve this discrepancy.
  string summary = 2;
  // The state of the issue.
  IssueContentState state = 3 [(google.api.field_behavior) = OUTPUT_ONLY];
  // The current status of the issue.
  StatusValue status = 4 [(google.api.field_behavior) = REQUIRED];
  // The user who created the issue.
  string reporter = 5 [
    (google.api.resource_reference) = { type: "api.crbug.com/User" },
    (google.api.field_behavior) = OUTPUT_ONLY
  ];
  // The user currently responsible for the issue. This user must be a member of
  // the Project.
  UserValue owner = 6;
  // Additional users receiving notifications on the issue.
  repeated UserValue cc_users = 7;
  // Labels applied to the issue.
  repeated LabelValue labels = 8;
  // Components the issue is associated with.
  repeated ComponentValue components = 9;
  // Values for custom fields on the issue.
  repeated FieldValue field_values = 10;
  // An issue can be merged into another. If this value is set, the issue
  // referred to should be considered the primary source for further updates.
  IssueRef merged_into_issue_ref = 11;
  // Issues preventing the completion of this issue.
  repeated IssueRef blocked_on_issue_refs = 12;
  // Issues for which this issue is blocking completion.
  repeated IssueRef blocking_issue_refs = 13;
  // The time the issue was reported.
  google.protobuf.Timestamp create_time = 14
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The most recent time the issue was closed.
  google.protobuf.Timestamp close_time = 15
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The most recent time the issue was modified.
  google.protobuf.Timestamp modify_time = 16
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The most recent time a component value was modified.
  google.protobuf.Timestamp component_modify_time = 17
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The most recent time the status value was modified.
  google.protobuf.Timestamp status_modify_time = 18
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The most recent time the owner made a modification to the issue.
  google.protobuf.Timestamp owner_modify_time = 19
      [(google.api.field_behavior) = OUTPUT_ONLY];
  // The number of attachments associated with the issue.
  uint32 attachment_count = 20 [(google.api.field_behavior) = OUTPUT_ONLY];
  // The number of users who have starred the issue.
  uint32 star_count = 21 [(google.api.field_behavior) = OUTPUT_ONLY];
  // Phases of a process the issue is tracking (if applicable).
  // See monorail/doc/userguide/concepts.md#issue-approvals-and-gates
  repeated string phases = 22 [
      (google.api.field_behavior) = OUTPUT_ONLY];
}

// States that an issue or its comments can be in (aip.dev/216).
// Next available tag: 4
enum IssueContentState {
  // The default value. This value is used if the state is omitted.
  STATE_UNSPECIFIED = 0;
  // The Issue or Comment is available.
  ACTIVE = 1;
  // The Issue or Comment has been deleted.
  DELETED = 2;
  // The Issue or Comment has been flagged as spam.
  // Takes precedent over DELETED.
  SPAM = 3;
}

// Specifies a column in an issues list view.
// Next available tag: 2
message IssuesListColumn {
  // Column name shown in the column header.
  string column = 1;
}

// Refers to an issue that may or may not be tracked in Monorail.
// At least one of `issue` and `ext_identifier` MUST be set; they MUST NOT both
// be set.
// Next available tag: 3
message IssueRef {
  // Resource name of an issue tracked in Monorail
  string issue = 1
      [(google.api.resource_reference) = { type: "api.crbug.com/Issue" }];
  // For referencing external issues, e.g. b/1234, or a dangling reference
  // to an old 'codesite' issue.
  // TODO(monorail:7208): add more documentation on dangling references.
  string ext_identifier = 2;
}

// Documents and tracks an approval process.
// See monorail/doc/userguide/concepts.md#issue-approvals-and-gates
// Next available tag: 9
message ApprovalValue {
  option (google.api.resource) = {
     type: "api.crbug.com/ApprovalValue"
     pattern: "projects/{project}/issues/{issue}/approvalValues/{approval}"
   };

  // Potential states for an approval. Note that these statuses cause different
  // sets of notifications. See monorail/doc/userguide/email.md
  // Next available tag: 9
  enum ApprovalStatus {
    // The default approval status. This value is used if the status is omitted.
    APPROVAL_STATUS_UNSPECIFIED = 0;
    // No status has yet been set on this value.
    NOT_SET = 1;
    // This issue needs review from the approvers for this phase.
    NEEDS_REVIEW = 2;
    // This approval is not needed for this issue for this phase.
    NA = 3;
    // The issue is ready for the approvers to review.
    REVIEW_REQUESTED = 4;
    // The approvers have started reviewing this issue.
    REVIEW_STARTED = 5;
    // The approvers need more information.
    NEED_INFO = 6;
    // The approvers have approved this issue for this phase.
    APPROVED = 7;
    // The approvers have indicated this issue is not approved for this phase.
    NOT_APPROVED = 8;
  }

  // The resource name.
  string name = 1;
  // The resource name of the ApprovalDef.
  string approval_def = 2 [
      (google.api.resource_reference) = { type: "api.crbug.com/ApprovalDef" },
      (google.api.field_behavior) = OUTPUT_ONLY];
  // The users able to grant this approval.
  repeated string approvers = 3 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" }];
  // The current status of the approval.
  ApprovalStatus status = 4;
  // The time `status` was last set.
  google.protobuf.Timestamp set_time = 5 [
      (google.api.field_behavior) = OUTPUT_ONLY];
  // The user who most recently set `status`.
  string setter = 6 [
      (google.api.resource_reference) = { type: "api.crbug.com/User" },
      (google.api.field_behavior) = OUTPUT_ONLY];
  // The phase the approval is associated with (if applicable).
  string phase = 7 [
      (google.api.field_behavior) = OUTPUT_ONLY];
  // FieldValues with `approval_def` as their parent.
  repeated FieldValue field_values = 8;
}