"use strict";

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

function _has() {
  const data = _interopRequireDefault(require("lodash/has"));

  _has = function () {
    return data;
  };

  return data;
}

function _fsExtra() {
  const data = _interopRequireDefault(require("fs-extra"));

  _fsExtra = function () {
    return data;
  };

  return data;
}

function _BaseUploader() {
  const data = _interopRequireDefault(require("./BaseUploader"));

  _BaseUploader = function () {
    return data;
  };

  return data;
}

function _utils() {
  const data = require("./utils");

  _utils = function () {
    return data;
  };

  return data;
}

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

  _prompt = function () {
    return data;
  };

  return data;
}

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

  _log = function () {
    return data;
  };

  return data;
}

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

const PLATFORM = 'android';

const FILE_DOESNT_EXIST_ERROR = path => `File ${path} doesn't exist.`;

const SERVICE_ACCOUNT_JSON_QUESTION = {
  name: 'key',
  message: 'The path to the file containing service account JSON, used to authenticate with Google:',
  type: 'input',
  validate: function validate(path) {
    const done = this.async();

    _fsExtra().default.pathExists(path).then(exists => {
      if (exists) {
        done(null, true);
      } else {
        done(FILE_DOESNT_EXIST_ERROR(path));
      }
    }).catch(err => done(err));
  }
};

class AndroidUploader extends _BaseUploader().default {
  constructor(projectDir, options) {
    super(PLATFORM, projectDir, options);
  }

  _ensureExperienceIsValid(exp) {
    if (!(0, _has().default)(exp, 'android.package')) {
      throw new Error('You must specify an Android package in app.json.');
    }
  }

  async _getPlatformSpecificOptions() {
    const key = await this._getServiceAccountJSONPath();
    return {
      key,
      track: this.options.track
    };
  }

  async _getServiceAccountJSONPath() {
    const {
      key
    } = this.options;

    if (key && (await _fsExtra().default.pathExists(key))) {
      return key;
    } else {
      if (key) {
        (0, _log().default)(FILE_DOESNT_EXIST_ERROR(key));
      }

      return await this._askForServiceAccountJSONPath();
    }
  }

  async _askForServiceAccountJSONPath() {
    const answer = await (0, _prompt().default)(SERVICE_ACCOUNT_JSON_QUESTION);
    return answer.key;
  }

  async _uploadToTheStore(platformData, path) {
    const {
      fastlane
    } = this;
    const {
      key,
      track
    } = platformData;
    const {
      package: androidPackage
    } = this._exp.android;
    await (0, _utils().runFastlaneAsync)(fastlane.supplyAndroid, [path, androidPackage, key, track], {}, true);
  }

}

exports.default = AndroidUploader;
//# sourceMappingURL=../../__sourcemaps__/commands/upload/AndroidUploader.js.map