# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

"""Protocol buffers for Monorail API."""

from __future__ import print_function
from __future__ import division
from __future__ import absolute_import

from endpoints import ResourceContainer
from protorpc import messages
from protorpc import message_types

from mrproto import usergroup_pb2


########################## Helper Message ##########################


class ErrorMessage(messages.Message):
  """Request error."""
  code = messages.IntegerField(
      1, required=True, variant=messages.Variant.INT32)
  reason = messages.StringField(2, required=True)
  message = messages.StringField(3, required=True)


class Status(messages.Message):
  """Issue status."""
  status = messages.StringField(1, required=True)
  meansOpen = messages.BooleanField(2, required=True)
  description = messages.StringField(3)


class Label(messages.Message):
  """Issue label."""
  label = messages.StringField(1, required=True)
  description = messages.StringField(2)


class Prompt(messages.Message):
  """Default issue template values."""
  name = messages.StringField(1, required=True)
  title = messages.StringField(2)
  description = messages.StringField(3)
  titleMustBeEdited = messages.BooleanField(4)
  status = messages.StringField(5)
  labels = messages.StringField(6, repeated=True)
  membersOnly = messages.BooleanField(7)
  defaultToMember = messages.BooleanField(8)
  componentRequired = messages.BooleanField(9)


class Role(messages.Enum):
  """User role."""
  owner = 1
  member = 2
  contributor = 3


class IssueState(messages.Enum):
  """Issue state."""
  closed = 0
  open = 1


class CannedQuery(messages.Enum):
  """Canned query to search issues."""
  all = 0
  new = 1
  open = 2
  owned = 3
  reported = 4
  starred = 5
  to_verify = 6


class AtomPerson(messages.Message):
  """Atomic person."""
  name = messages.StringField(1, required=True)
  htmlLink = messages.StringField(2)
  kind = messages.StringField(3)
  last_visit_days_ago = messages.IntegerField(4)
  email_bouncing = messages.BooleanField(5)
  vacation_message = messages.StringField(6)


class Attachment(messages.Message):
  """Issue attachment."""
  attachmentId = messages.IntegerField(
      1, variant=messages.Variant.INT64, required=True)
  fileName = messages.StringField(2, required=True)
  fileSize = messages.IntegerField(
      3, required=True, variant=messages.Variant.INT32)
  mimetype = messages.StringField(4, required=True)
  isDeleted = messages.BooleanField(5)


class IssueRef(messages.Message):
  "Issue reference."
  issueId = messages.IntegerField(
      1, required=True, variant=messages.Variant.INT32)
  projectId = messages.StringField(2)
  kind = messages.StringField(3)


class FieldValueOperator(messages.Enum):
  """Operator of field values."""
  add = 1
  remove = 2
  clear = 3


class FieldValue(messages.Message):
  """Custom field values."""
  fieldName = messages.StringField(1, required=True)
  fieldValue = messages.StringField(2)
  derived = messages.BooleanField(3, default=False)
  operator = messages.EnumField(FieldValueOperator, 4, default='add')
  phaseName = messages.StringField(5)
  approvalName = messages.StringField(6)


class Update(messages.Message):
  """Issue update."""
  summary = messages.StringField(1)
  status = messages.StringField(2)
  owner = messages.StringField(3)
  labels = messages.StringField(4, repeated=True)
  cc = messages.StringField(5, repeated=True)
  blockedOn = messages.StringField(6, repeated=True)
  blocking = messages.StringField(7, repeated=True)
  mergedInto = messages.StringField(8)
  kind = messages.StringField(9)
  components = messages.StringField(10, repeated=True)
  moveToProject = messages.StringField(11)
  fieldValues = messages.MessageField(FieldValue, 12, repeated=True)
  is_description = messages.BooleanField(13)


class ApprovalUpdate(messages.Message):
  """Approval update."""
  approvers = messages.StringField(1, repeated=True)
  status = messages.StringField(2)
  kind = messages.StringField(3)
  fieldValues = messages.MessageField(FieldValue, 4, repeated=True)


class ProjectIssueConfig(messages.Message):
  """Issue configuration of project."""
  kind = messages.StringField(1)
  restrictToKnown = messages.BooleanField(2)
  defaultColumns = messages.StringField(3, repeated=True)
  defaultSorting = messages.StringField(4, repeated=True)
  statuses = messages.MessageField(Status, 5, repeated=True)
  labels = messages.MessageField(Label, 6, repeated=True)
  prompts = messages.MessageField(Prompt, 7, repeated=True)
  defaultPromptForMembers = messages.IntegerField(
      8, variant=messages.Variant.INT32)
  defaultPromptForNonMembers = messages.IntegerField(
      9, variant=messages.Variant.INT32)
  usersCanSetLabels = messages.BooleanField(10)


class Phase(messages.Message):
  """Issue phase details."""
  phaseName = messages.StringField(1)
  rank = messages.IntegerField(2)


class IssueCommentWrapper(messages.Message):
  """Issue comment details."""
  attachments = messages.MessageField(Attachment, 1, repeated=True)
  author = messages.MessageField(AtomPerson, 2)
  canDelete = messages.BooleanField(3)
  content = messages.StringField(4)
  deletedBy = messages.MessageField(AtomPerson, 5)
  id = messages.IntegerField(6, variant=messages.Variant.INT32)
  published = message_types.DateTimeField(7)
  updates = messages.MessageField(Update, 8)
  kind = messages.StringField(9)
  is_description = messages.BooleanField(10)


class ApprovalCommentWrapper(messages.Message):
  """Approval comment details."""
  attachments = messages.MessageField(Attachment, 1, repeated=True)
  author = messages.MessageField(AtomPerson, 2)
  canDelete = messages.BooleanField(3)
  content = messages.StringField(4)
  deletedBy = messages.MessageField(AtomPerson, 5)
  id = messages.IntegerField(6, variant=messages.Variant.INT32)
  published = message_types.DateTimeField(7)
  approvalUpdates = messages.MessageField(ApprovalUpdate, 8)
  kind = messages.StringField(9)
  is_description = messages.BooleanField(10)


class ApprovalStatus(messages.Enum):
  """Allowed Approval Statuses."""
  needsReview = 1
  nA = 2
  reviewRequested = 3
  reviewStarted = 4
  needInfo = 5
  approved = 6
  notApproved = 7
  notSet = 8


class Approval(messages.Message):
  """Approval Value details"""
  approvalName = messages.StringField(1)
  approvers = messages.MessageField(AtomPerson, 2, repeated=True)
  status = messages.EnumField(ApprovalStatus, 3)
  setter = messages.MessageField(AtomPerson, 4)
  setOn = message_types.DateTimeField(5)
  phaseName = messages.StringField(6)


class IssueWrapper(messages.Message):
  """Issue details."""
  author = messages.MessageField(AtomPerson, 1)
  blockedOn = messages.MessageField(IssueRef, 2, repeated=True)
  blocking = messages.MessageField(IssueRef, 3, repeated=True)
  canComment = messages.BooleanField(4)
  canEdit = messages.BooleanField(5)
  cc = messages.MessageField(AtomPerson, 6, repeated=True)
  closed = message_types.DateTimeField(7)
  description = messages.StringField(8)
  id = messages.IntegerField(9, variant=messages.Variant.INT32)
  kind = messages.StringField(10)
  labels = messages.StringField(11, repeated=True)
  owner = messages.MessageField(AtomPerson, 12)
  published = message_types.DateTimeField(13)
  starred = messages.BooleanField(14)
  stars = messages.IntegerField(15, variant=messages.Variant.INT32)
  state = messages.EnumField(IssueState, 16)
  status = messages.StringField(17, required=True)
  summary = messages.StringField(18, required=True)
  title = messages.StringField(19)
  updated = message_types.DateTimeField(20)
  components = messages.StringField(21, repeated=True)
  projectId = messages.StringField(22, required=True)
  mergedInto = messages.MessageField(IssueRef, 23)
  fieldValues = messages.MessageField(FieldValue, 24, repeated=True)
  owner_modified = message_types.DateTimeField(25)
  status_modified = message_types.DateTimeField(26)
  component_modified = message_types.DateTimeField(27)
  approvalValues = messages.MessageField(Approval, 28, repeated=True)
  phases = messages.MessageField(Phase, 29, repeated=True)
  migrated_id = messages.StringField(30)

class ProjectWrapper(messages.Message):
  """Project details."""
  kind = messages.StringField(1)
  name = messages.StringField(2)
  externalId = messages.StringField(3, required=True)
  htmlLink = messages.StringField(4, required=True)
  summary = messages.StringField(5)
  description = messages.StringField(6)
  versionControlSystem = messages.StringField(7)
  repositoryUrls = messages.StringField(8, repeated=True)
  issuesConfig = messages.MessageField(ProjectIssueConfig, 9)
  role = messages.EnumField(Role, 10)
  members = messages.MessageField(AtomPerson, 11, repeated=True)


class UserGroupSettingsWrapper(messages.Message):
  """User group settings."""
  groupName = messages.StringField(1, required=True)
  who_can_view_members = messages.EnumField(
      usergroup_pb2.MemberVisibility, 2,
      default=usergroup_pb2.MemberVisibility.MEMBERS)
  ext_group_type = messages.EnumField(usergroup_pb2.GroupType, 3)
  last_sync_time = messages.IntegerField(
      4, default=0, variant=messages.Variant.INT32)


class GroupCitizens(messages.Message):
  """Group members and owners."""
  groupOwners = messages.StringField(1, repeated=True)
  groupMembers = messages.StringField(2, repeated=True)


########################## Comments Message ##########################

# pylint: disable=pointless-string-statement

"""Request to delete/undelete an issue's comments."""
ISSUES_COMMENTS_DELETE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32),
    commentId=messages.IntegerField(
        3, required=True, variant=messages.Variant.INT32)
)


class IssuesCommentsDeleteResponse(messages.Message):
  """Response message of request to delete/undelete an issue's comments."""
  error = messages.MessageField(ErrorMessage, 1)


"""Request to insert an issue's comments."""
ISSUES_COMMENTS_INSERT_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    IssueCommentWrapper,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32),
    sendEmail=messages.BooleanField(3)
)


class IssuesCommentsInsertResponse(messages.Message):
  """Response message of request to insert an issue's comments."""
  error = messages.MessageField(ErrorMessage, 1)
  id = messages.IntegerField(2, variant=messages.Variant.INT32)
  kind = messages.StringField(3)
  author = messages.MessageField(AtomPerson, 4)
  content = messages.StringField(5)
  published = message_types.DateTimeField(6)
  updates = messages.MessageField(Update, 7)
  canDelete = messages.BooleanField(8)


"""Request to list an issue's comments."""
ISSUES_COMMENTS_LIST_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32),
    maxResults=messages.IntegerField(
        3, default=100, variant=messages.Variant.INT32),
    startIndex=messages.IntegerField(
        4, default=0, variant=messages.Variant.INT32)
)


class IssuesCommentsListResponse(messages.Message):
  """Response message of request to list an issue's comments."""
  error = messages.MessageField(ErrorMessage, 1)
  items = messages.MessageField(IssueCommentWrapper, 2, repeated=True)
  totalResults = messages.IntegerField(3, variant=messages.Variant.INT32)
  kind = messages.StringField(4)

########################## ApprovalComments Message ################

"""Request to insert an issue approval's comments."""
APPROVALS_COMMENTS_INSERT_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    ApprovalCommentWrapper,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32),
    approvalName=messages.StringField(3, required=True),
    sendEmail=messages.BooleanField(4)
)


class ApprovalsCommentsInsertResponse(messages.Message):
  """Response message of request to insert an isuse's comments."""
  error = messages.MessageField(ErrorMessage, 1)
  id = messages.IntegerField(2, variant=messages.Variant.INT32)
  kind = messages.StringField(3)
  author = messages.MessageField(AtomPerson, 4)
  content = messages.StringField(5)
  published = message_types.DateTimeField(6)
  approvalUpdates = messages.MessageField(ApprovalUpdate, 7)
  canDelete = messages.BooleanField(8)
  approvalName = messages.StringField(9)


"""Requests to list an approval's comments."""
APPROVALS_COMMENTS_LIST_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32),
    approvalName=messages.StringField(3, required=True),
    maxResults=messages.IntegerField(
        4, default=100, variant=messages.Variant.INT32),
    startIndex=messages.IntegerField(
        5, default=0, variant=messages.Variant.INT32)
)


class ApprovalsCommentsListResponse(messages.Message):
  """Response message of request to list an approval's comments."""
  error = messages.MessageField(ErrorMessage, 1)
  items = messages.MessageField(ApprovalCommentWrapper, 2, repeated=True)
  totalResults = messages.IntegerField(3, variant=messages.Variant.INT32)
  kind = messages.StringField(4)

########################## Users Message ##########################

"""Request to get a user."""
USERS_GET_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    userId=messages.StringField(1, required=True),
    ownerProjectsOnly=messages.BooleanField(2, default=False)
)


class UsersGetResponse(messages.Message):
  """Response message of request to get a user."""
  error = messages.MessageField(ErrorMessage, 1)
  id = messages.StringField(2)
  kind = messages.StringField(3)
  projects = messages.MessageField(ProjectWrapper, 4, repeated=True)


########################## Issues Message ##########################

"""Request to get an issue."""
ISSUES_GET_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    issueId=messages.IntegerField(
        2, required=True, variant=messages.Variant.INT32)
)


"""Request to insert an issue."""
ISSUES_INSERT_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    IssueWrapper,
    projectId=messages.StringField(1, required=True),
    sendEmail=messages.BooleanField(2, default=True)
)


class IssuesGetInsertResponse(messages.Message):
  """Response message of request to get/insert an issue."""
  error = messages.MessageField(ErrorMessage, 1)
  kind = messages.StringField(2)
  id = messages.IntegerField(3, variant=messages.Variant.INT32)
  title = messages.StringField(4)
  summary = messages.StringField(5)
  stars = messages.IntegerField(6, variant=messages.Variant.INT32)
  starred = messages.BooleanField(7)
  status = messages.StringField(8)
  state = messages.EnumField(IssueState, 9)
  labels = messages.StringField(10, repeated=True)
  author = messages.MessageField(AtomPerson, 11)
  owner = messages.MessageField(AtomPerson, 12)
  cc = messages.MessageField(AtomPerson, 13, repeated=True)
  updated = message_types.DateTimeField(14)
  published = message_types.DateTimeField(15)
  closed = message_types.DateTimeField(16)
  blockedOn = messages.MessageField(IssueRef, 17, repeated=True)
  blocking = messages.MessageField(IssueRef, 18, repeated=True)
  projectId = messages.StringField(19)
  canComment = messages.BooleanField(20)
  canEdit = messages.BooleanField(21)
  components = messages.StringField(22, repeated=True)
  mergedInto = messages.MessageField(IssueRef, 23)
  fieldValues = messages.MessageField(FieldValue, 24, repeated=True)
  owner_modified = message_types.DateTimeField(25)
  status_modified = message_types.DateTimeField(26)
  component_modified = message_types.DateTimeField(27)
  approvalValues = messages.MessageField(Approval, 28, repeated=True)
  phases = messages.MessageField(Phase, 29, repeated=True)
  migrated_id = messages.StringField(30)


"""Request to list issues."""
ISSUES_LIST_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    additionalProject=messages.StringField(2, repeated=True),
    can=messages.EnumField(CannedQuery, 3, default='all'),
    label=messages.StringField(4),
    maxResults=messages.IntegerField(
        5, default=100, variant=messages.Variant.INT32),
    owner=messages.StringField(6),
    publishedMax=messages.IntegerField(7, variant=messages.Variant.INT64),
    publishedMin=messages.IntegerField(8, variant=messages.Variant.INT64),
    q=messages.StringField(9),
    sort=messages.StringField(10),
    startIndex=messages.IntegerField(
        11, default=0, variant=messages.Variant.INT32),
    status=messages.StringField(12),
    updatedMax=messages.IntegerField(13, variant=messages.Variant.INT64),
    updatedMin=messages.IntegerField(14, variant=messages.Variant.INT64)
)


class IssuesListResponse(messages.Message):
  """Response message of request to list issues."""
  error = messages.MessageField(ErrorMessage, 1)
  items = messages.MessageField(IssueWrapper, 2, repeated=True)
  totalResults = messages.IntegerField(3, variant=messages.Variant.INT32)
  kind = messages.StringField(4)


"""Request to list group settings."""
GROUPS_SETTINGS_LIST_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    importedGroupsOnly=messages.BooleanField(1, default=False)
)


class GroupsSettingsListResponse(messages.Message):
  """Response message of request to list group settings."""
  error = messages.MessageField(ErrorMessage, 1)
  groupSettings = messages.MessageField(
      UserGroupSettingsWrapper, 2, repeated=True)


"""Request to create a group."""
GROUPS_CREATE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    groupName = messages.StringField(1, required=True),
    who_can_view_members = messages.EnumField(
        usergroup_pb2.MemberVisibility, 2,
        default=usergroup_pb2.MemberVisibility.MEMBERS, required=True),
    ext_group_type = messages.EnumField(usergroup_pb2.GroupType, 3)
)


class GroupsCreateResponse(messages.Message):
  """Response message of request to create a group."""
  error = messages.MessageField(ErrorMessage, 1)
  groupID = messages.IntegerField(
      2, variant=messages.Variant.INT32)


"""Request to get a group."""
GROUPS_GET_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    groupName = messages.StringField(1, required=True)
)


class GroupsGetResponse(messages.Message):
  """Response message of request to create a group."""
  error = messages.MessageField(ErrorMessage, 1)
  groupID = messages.IntegerField(
      2, variant=messages.Variant.INT32)
  groupSettings = messages.MessageField(
      UserGroupSettingsWrapper, 3)
  groupOwners = messages.StringField(4, repeated=True)
  groupMembers = messages.StringField(5, repeated=True)


"""Request to update a group."""
GROUPS_UPDATE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    GroupCitizens,
    groupName = messages.StringField(1, required=True),
    who_can_view_members = messages.EnumField(
        usergroup_pb2.MemberVisibility, 2),
    ext_group_type = messages.EnumField(usergroup_pb2.GroupType, 3),
    last_sync_time = messages.IntegerField(
        4, default=0, variant=messages.Variant.INT32),
    friend_projects = messages.StringField(5, repeated=True),
)


class GroupsUpdateResponse(messages.Message):
  """Response message of request to update a group."""
  error = messages.MessageField(ErrorMessage, 1)


########################## Component Message ##########################

class Component(messages.Message):
  """Component PB."""
  componentId = messages.IntegerField(
      1, required=True, variant=messages.Variant.INT32)
  projectName = messages.StringField(2, required=True)
  componentPath = messages.StringField(3, required=True)
  description = messages.StringField(4)
  admin = messages.StringField(5, repeated=True)
  cc = messages.StringField(6, repeated=True)
  deprecated = messages.BooleanField(7, default=False)
  created = message_types.DateTimeField(8)
  creator = messages.StringField(9)
  modified = message_types.DateTimeField(10)
  modifier = messages.StringField(11)


"""Request to get components of a project."""
COMPONENTS_LIST_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
)


class ComponentsListResponse(messages.Message):
  """Response to list components."""
  components = messages.MessageField(
      Component, 1, repeated=True)


class ComponentCreateRequestBody(messages.Message):
  """Request body to create a component."""
  parentPath = messages.StringField(1)
  description = messages.StringField(2)
  admin = messages.StringField(3, repeated=True)
  cc = messages.StringField(4, repeated=True)
  deprecated = messages.BooleanField(5, default=False)


"""Request to create component of a project."""
COMPONENTS_CREATE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    ComponentCreateRequestBody,
    projectId=messages.StringField(1, required=True),
    componentName=messages.StringField(2, required=True),
)


"""Request to delete a component."""
COMPONENTS_DELETE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    message_types.VoidMessage,
    projectId=messages.StringField(1, required=True),
    componentPath=messages.StringField(2, required=True),
)


class ComponentUpdateFieldID(messages.Enum):
  """Possible fields that can be updated in a component."""
  LEAF_NAME = 1
  DESCRIPTION = 2
  ADMIN = 3
  CC = 4
  DEPRECATED = 5


class ComponentUpdate(messages.Message):
  """Component update."""
  # 'field' allows a field to be cleared
  field = messages.EnumField(ComponentUpdateFieldID, 1, required=True)
  leafName = messages.StringField(2)
  description = messages.StringField(3)
  admin = messages.StringField(4, repeated=True)
  cc = messages.StringField(5, repeated=True)
  deprecated = messages.BooleanField(6)


class ComponentUpdateRequestBody(messages.Message):
  """Request body to update a component."""
  updates = messages.MessageField(ComponentUpdate, 1, repeated=True)


"""Request to update a component."""
COMPONENTS_UPDATE_REQUEST_RESOURCE_CONTAINER = ResourceContainer(
    ComponentUpdateRequestBody,
    projectId=messages.StringField(1, required=True),
    componentPath=messages.StringField(2, required=True),
)
