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

/**
 * @fileoverview A file containing common constants used in the Approvals
 * feature.
 */

// Only approvers are allowed to set an approval state to one of these states.
export const APPROVER_RESTRICTED_STATUSES = new Set(
    ['NA', 'Approved', 'NotApproved']);

// Map the internal enum names used in Monorail's backend from approval
// statuses to user friendly names.
export const STATUS_ENUM_TO_TEXT = {
  '': 'NotSet',
  'NEEDS_REVIEW': 'NeedsReview',
  'NA': 'NA',
  'REVIEW_REQUESTED': 'ReviewRequested',
  'REVIEW_STARTED': 'ReviewStarted',
  'NEED_INFO': 'NeedInfo',
  'APPROVED': 'Approved',
  'NOT_APPROVED': 'NotApproved',
};

// Reverse mapping of user friendly names to internal enum names.
// Note that NotSet -> NOT_SET maps differently in reverse because
// the backend sends an empty message to communicate NOT_SET.
export const TEXT_TO_STATUS_ENUM = {
  'NotSet': 'NOT_SET',
  'NeedsReview': 'NEEDS_REVIEW',
  'NA': 'NA',
  'ReviewRequested': 'REVIEW_REQUESTED',
  'ReviewStarted': 'REVIEW_STARTED',
  'NeedInfo': 'NEED_INFO',
  'Approved': 'APPROVED',
  'NotApproved': 'NOT_APPROVED',
};

// Statuses mapped to CSS classes used to apply custom styles per
// status like background colors.
export const STATUS_CLASS_MAP = {
  'NotSet': 'status-notset',
  'NeedsReview': 'status-notset',
  'NA': 'status-na',
  'ReviewRequested': 'status-pending',
  'ReviewStarted': 'status-pending',
  'NeedInfo': 'status-pending',
  'Approved': 'status-approved',
  'NotApproved': 'status-rejected',
};

// Hardcoded frontent documentation for each approval status.
export const STATUS_DOCSTRING_MAP = {
  'NotSet': '',
  'NeedsReview': 'Review/survey not started',
  'NA': 'Approval gate not required',
  'ReviewRequested': 'Approval requested',
  'ReviewStarted': 'Approval in progress',
  'NeedInfo': 'Approval review needs more information',
  'Approved': 'Approved for Launch',
  'NotApproved': 'Not Approved for Launch',
};

// The Material Design icon names that are attached to each
// CSS class.
export const CLASS_ICON_MAP = {
  'status-na': 'remove',
  'status-notset': 'warning',
  'status-pending': 'autorenew',
  'status-approved': 'done',
  'status-rejected': 'close',
};

// Statuses formated as an Array rather than an Object for ease of use
// by components.
export const APPROVAL_STATUSES = Object.keys(STATUS_CLASS_MAP).map(
    (status) => ({status, docstring: STATUS_DOCSTRING_MAP[status], rank: 1}));
