'use strict';

Object.defineProperty(exports, '__esModule', {
  value: true
});
exports.default = getSnapshotSummary;

function _chalk() {
  const data = _interopRequireDefault(require('chalk'));

  _chalk = function () {
    return data;
  };

  return data;
}

function _jestUtil() {
  const data = require('jest-util');

  _jestUtil = function () {
    return data;
  };

  return data;
}

var _utils = require('./utils');

function _interopRequireDefault(obj) {
  return obj && obj.__esModule ? obj : {default: obj};
}

/**
 * Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */
const ARROW = ' \u203A ';
const DOWN_ARROW = ' \u21B3 ';
const DOT = ' \u2022 ';

const FAIL_COLOR = _chalk().default.bold.red;

const OBSOLETE_COLOR = _chalk().default.bold.yellow;

const SNAPSHOT_ADDED = _chalk().default.bold.green;

const SNAPSHOT_NOTE = _chalk().default.dim;

const SNAPSHOT_REMOVED = _chalk().default.bold.green;

const SNAPSHOT_SUMMARY = _chalk().default.bold;

const SNAPSHOT_UPDATED = _chalk().default.bold.green;

function getSnapshotSummary(snapshots, globalConfig, updateCommand) {
  const summary = [];
  summary.push(SNAPSHOT_SUMMARY('Snapshot Summary'));

  if (snapshots.added) {
    summary.push(
      SNAPSHOT_ADDED(
        ARROW +
          (0, _jestUtil().pluralize)('snapshot', snapshots.added) +
          ' written '
      ) +
        `from ${(0, _jestUtil().pluralize)(
          'test suite',
          snapshots.filesAdded
        )}.`
    );
  }

  if (snapshots.unmatched) {
    summary.push(
      FAIL_COLOR(
        `${ARROW}${(0, _jestUtil().pluralize)(
          'snapshot',
          snapshots.unmatched
        )} failed`
      ) +
        ` from ${(0, _jestUtil().pluralize)(
          'test suite',
          snapshots.filesUnmatched
        )}. ` +
        SNAPSHOT_NOTE(
          'Inspect your code changes or ' + updateCommand + ' to update them.'
        )
    );
  }

  if (snapshots.updated) {
    summary.push(
      SNAPSHOT_UPDATED(
        ARROW +
          (0, _jestUtil().pluralize)('snapshot', snapshots.updated) +
          ' updated '
      ) +
        `from ${(0, _jestUtil().pluralize)(
          'test suite',
          snapshots.filesUpdated
        )}.`
    );
  }

  if (snapshots.filesRemoved) {
    if (snapshots.didUpdate) {
      summary.push(
        SNAPSHOT_REMOVED(
          `${ARROW}${(0, _jestUtil().pluralize)(
            'snapshot file',
            snapshots.filesRemoved
          )} removed `
        ) +
          `from ${(0, _jestUtil().pluralize)(
            'test suite',
            snapshots.filesRemoved
          )}.`
      );
    } else {
      summary.push(
        OBSOLETE_COLOR(
          `${ARROW}${(0, _jestUtil().pluralize)(
            'snapshot file',
            snapshots.filesRemoved
          )} obsolete `
        ) +
          `from ${(0, _jestUtil().pluralize)(
            'test suite',
            snapshots.filesRemoved
          )}. ` +
          SNAPSHOT_NOTE(
            `To remove ${
              snapshots.filesRemoved === 1 ? 'it' : 'them all'
            }, ${updateCommand}.`
          )
      );
    }
  }

  if (snapshots.filesRemovedList && snapshots.filesRemovedList.length) {
    const [head, ...tail] = snapshots.filesRemovedList;
    summary.push(
      `  ${DOWN_ARROW} ${DOT}${(0, _utils.formatTestPath)(globalConfig, head)}`
    );
    tail.forEach(key => {
      summary.push(
        `      ${DOT}${(0, _utils.formatTestPath)(globalConfig, key)}`
      );
    });
  }

  if (snapshots.unchecked) {
    if (snapshots.didUpdate) {
      summary.push(
        SNAPSHOT_REMOVED(
          `${ARROW}${(0, _jestUtil().pluralize)(
            'snapshot',
            snapshots.unchecked
          )} removed `
        ) +
          `from ${(0, _jestUtil().pluralize)(
            'test suite',
            snapshots.uncheckedKeysByFile.length
          )}.`
      );
    } else {
      summary.push(
        OBSOLETE_COLOR(
          `${ARROW}${(0, _jestUtil().pluralize)(
            'snapshot',
            snapshots.unchecked
          )} obsolete `
        ) +
          `from ${(0, _jestUtil().pluralize)(
            'test suite',
            snapshots.uncheckedKeysByFile.length
          )}. ` +
          SNAPSHOT_NOTE(
            `To remove ${
              snapshots.unchecked === 1 ? 'it' : 'them all'
            }, ${updateCommand}.`
          )
      );
    }

    snapshots.uncheckedKeysByFile.forEach(uncheckedFile => {
      summary.push(
        `  ${DOWN_ARROW}${(0, _utils.formatTestPath)(
          globalConfig,
          uncheckedFile.filePath
        )}`
      );
      uncheckedFile.keys.forEach(key => {
        summary.push(`      ${DOT}${key}`);
      });
    });
  }

  return summary;
}
