"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = void 0;

function _difference() {
  const data = _interopRequireDefault(require("lodash/difference"));

  _difference = function () {
    return data;
  };

  return data;
}

function _isObject() {
  const data = _interopRequireDefault(require("lodash/isObject"));

  _isObject = function () {
    return data;
  };

  return data;
}

function _pickBy() {
  const data = _interopRequireDefault(require("lodash/pickBy"));

  _pickBy = function () {
    return data;
  };

  return data;
}

function _merge() {
  const data = _interopRequireDefault(require("lodash/merge"));

  _merge = function () {
    return data;
  };

  return data;
}

function _getFromParams() {
  const data = _interopRequireDefault(require("./getFromParams"));

  _getFromParams = function () {
    return data;
  };

  return data;
}

function _promptForCredentials() {
  const data = _interopRequireDefault(require("./promptForCredentials"));

  _promptForCredentials = function () {
    return data;
  };

  return data;
}

function _promptForOverrides() {
  const data = _interopRequireDefault(require("./promptForOverrides"));

  _promptForOverrides = function () {
    return data;
  };

  return data;
}

function constants() {
  const data = _interopRequireWildcard(require("../constants"));

  constants = function () {
    return data;
  };

  return data;
}

function _log() {
  const data = _interopRequireDefault(require("../../../../../log"));

  _log = function () {
    return data;
  };

  return data;
}

function _prompt2() {
  const data = _interopRequireDefault(require("../../../../../prompt"));

  _prompt2 = function () {
    return data;
  };

  return data;
}

function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { var desc = Object.defineProperty && Object.getOwnPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : {}; if (desc.get || desc.set) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } } newObj.default = obj; return newObj; } }

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

async function prompt(appleCtx, options, missingCredentials) {
  const credentialsFromParams = await (0, _getFromParams().default)(options);
  const stillMissingCredentials = (0, _difference().default)(missingCredentials, Object.keys(credentialsFromParams));

  if (stillMissingCredentials.length === 0) {
    return {
      credentials: _flattenObject(credentialsFromParams),
      metadata: {}
    };
  }

  const names = stillMissingCredentials.map(id => constants().CREDENTIALS[id].name).join(', ');

  _log().default.warn(`We are missing the following credentials from you: ${names}`);

  const {
    credentials: answers,
    metadata
  } = (await _shouldExpoGenerateCerts()) ? await (0, _promptForOverrides().default)(appleCtx, stillMissingCredentials) : await (0, _promptForCredentials().default)(appleCtx, stillMissingCredentials);
  const reused = Object.values(answers).filter(i => (0, _isObject().default)(i) && 'reuse' in i).map(i => i.reuse);
  const userCredentialsIds = reused.map(i => i.userCredentialsId);
  const metadataFromReused = reused.reduce((acc, {
    userCredentialsId,
    ...rest
  }) => ({ ...acc,
    ...rest
  }), {});
  const toGenerate = Object.keys(answers).filter(key => answers[key] === constants().EXPO_WILL_GENERATE);
  const credentialsFromAnswers = (0, _pickBy().default)(answers, val => val !== constants().EXPO_WILL_GENERATE && !((0, _isObject().default)(val) && 'reuse' in val));
  const mergedCredentials = (0, _merge().default)({}, credentialsFromParams, credentialsFromAnswers);
  const metadataToReturn = { ...metadata,
    ...metadataFromReused
  };
  return {
    credentials: _flattenObject(mergedCredentials),
    userCredentialsIds,
    metadata: metadataToReturn,
    toGenerate
  };
}

async function _shouldExpoGenerateCerts() {
  const {
    expoShouldGenerateCerts
  } = await (0, _prompt2().default)({
    type: 'list',
    name: 'expoShouldGenerateCerts',
    message: 'How would you like to upload your credentials?',
    choices: [{
      name: 'Expo handles all credentials, you can still provide overrides',
      value: true
    }, {
      name: 'I will provide all the credentials and files needed, Expo does limited validation',
      value: false
    }]
  });
  return expoShouldGenerateCerts;
}

const _flattenObject = obj => {
  return Object.keys(obj).reduce((acc, key) => {
    const value = obj[key];

    if ((0, _isObject().default)(value)) {
      return { ...acc,
        ..._flattenObject(value)
      };
    } else {
      return { ...acc,
        [key]: value
      };
    }
  }, {});
};

var _default = prompt;
exports.default = _default;
//# sourceMappingURL=../../../../../__sourcemaps__/commands/build/ios/credentials/prompt/index.js.map