"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.askQuit = askQuit;
exports.SelectAndroidExperience = exports.SelectIosExperience = exports.SelectPlatform = void 0;

function _get() {
  const data = _interopRequireDefault(require("lodash/get"));

  _get = 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 androidView() {
  const data = _interopRequireWildcard(require("./AndroidCredentials"));

  androidView = function () {
    return data;
  };

  return data;
}

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

  iosPushView = function () {
    return data;
  };

  return data;
}

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

  iosDistView = function () {
    return data;
  };

  return data;
}

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

  iosProvisionigProfileView = function () {
    return data;
  };

  return data;
}

function _route() {
  const data = require("../route");

  _route = function () {
    return data;
  };

  return data;
}

function _list() {
  const data = require("../actions/list");

  _list = 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 }; }

function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }

class SelectPlatform {
  async open(ctx) {
    const {
      platform
    } = await (0, _prompt().default)([{
      type: 'list',
      name: 'platform',
      message: 'Select platform',
      pageSize: Infinity,
      choices: ['ios', 'android']
    }]);
    const view = platform === 'ios' ? new SelectIosExperience() : new SelectAndroidExperience();
    (0, _route().changeMainView)(view);
    return view;
  }

}

exports.SelectPlatform = SelectPlatform;

class SelectIosExperience {
  async open(ctx) {
    const iosCredentials = await ctx.ios.getAllCredentials();
    await (0, _list().displayIosCredentials)(iosCredentials);
    const projectSpecificActions = ctx.hasProjectContext ? [_prompt().default.separator('---- Current project actions ----'), {
      value: 'use-existing-push-ios',
      name: 'Use existing Push Notifications Key in current project'
    }, {
      value: 'use-existing-dist-ios',
      name: 'Use existing Distribution Certificate in current project'
    }, // {
    //   value: 'current-remove-push-ios',
    //   name: 'Remove Push Notifactions credentials for current project',
    // },
    // {
    //   value: 'current-remove-dist-ios',
    //   name: 'Remove Distribution Certificate for current project',
    // },
    // {
    //   value: 'current-remove-app-ios',
    //   name: 'Remove all credentials for current project',
    // },
    _prompt().default.separator('---- Account level actions ----')] : [];
    const question = {
      type: 'list',
      name: 'action',
      message: 'What do you want to do?',
      choices: [...projectSpecificActions, {
        value: 'remove-provisioning-profile',
        name: 'Remove Provisioning Profile'
      }, {
        value: 'create-ios-push',
        name: 'Add new Push Notifications Key'
      }, {
        value: 'remove-ios-push',
        name: 'Remove Push Notification credentials'
      }, {
        value: 'update-ios-push',
        name: 'Update Push Notifications Key'
      }, {
        value: 'create-ios-dist',
        name: 'Add new Distribution Certificate'
      }, {
        value: 'remove-ios-dist',
        name: 'Remove Distribution Certificate'
      }, {
        value: 'update-ios-dist',
        name: 'Update Distribution Certificate'
      }],
      pageSize: Infinity
    };
    const {
      action
    } = await (0, _prompt().default)(question);
    return this.handleAction(ctx, action);
  }

  handleAction(ctx, action) {
    switch (action) {
      case 'create-ios-push':
        return new (iosPushView().CreateIosPush)();

      case 'update-ios-push':
        return new (iosPushView().UpdateIosPush)();

      case 'remove-ios-push':
        return new (iosPushView().RemoveIosPush)();

      case 'create-ios-dist':
        return new (iosDistView().CreateIosDist)();

      case 'update-ios-dist':
        return new (iosDistView().UpdateIosDist)();

      case 'remove-ios-dist':
        return new (iosDistView().RemoveIosDist)();

      case 'use-existing-push-ios':
        return new (iosPushView().UseExistingPushNotification)();

      case 'use-existing-dist-ios':
        return new (iosDistView().UseExistingDistributionCert)();

      case 'remove-provisioning-profile':
        return new (iosProvisionigProfileView().RemoveProvisioningProfile)();

      default:
        throw new Error('Unknown action selected');
    }
  }

}

exports.SelectIosExperience = SelectIosExperience;

class SelectAndroidExperience {
  constructor() {
    _defineProperty(this, "androidCredentials", []);

    _defineProperty(this, "askAboutProjectMode", true);
  }

  async open(ctx) {
    if (ctx.hasProjectContext && this.askAboutProjectMode) {
      const experienceName = `@${ctx.user.username}/${ctx.manifest.slug}`;
      const {
        runProjectContext
      } = await (0, _prompt().default)([{
        type: 'confirm',
        name: 'runProjectContext',
        message: `You are currently in a directory with ${experienceName} experience. Do you want to select it?`
      }]);

      if (runProjectContext) {
        const view = new (androidView().ExperienceView)(ctx.manifest.slug, null);
        (0, _route().changeMainView)(view);
        return view;
      }
    }

    this.askAboutProjectMode = false;

    if (this.androidCredentials.length === 0) {
      this.androidCredentials = (0, _get().default)((await ctx.api.getAsync('credentials/android')), 'credentials');
    }

    await (0, _list().displayAndroidCredentials)(this.androidCredentials);
    const question = {
      type: 'list',
      name: 'appIndex',
      message: 'Select application',
      choices: this.androidCredentials.map((cred, index) => ({
        name: cred.experienceName,
        value: index
      })),
      pageSize: Infinity
    };
    const {
      appIndex
    } = await (0, _prompt().default)(question);
    const matchName = this.androidCredentials[appIndex].experienceName.match(/@[\w.-]+\/([\w.-]+)/);

    if (matchName && matchName[1]) {
      return new (androidView().ExperienceView)(matchName[1], this.androidCredentials[appIndex]);
    } else {
      _log().default.error('Invalid experience name');
    }

    return null;
  }

}

exports.SelectAndroidExperience = SelectAndroidExperience;

async function askQuit(mainpage) {
  const {
    selected
  } = await (0, _prompt().default)([{
    type: 'list',
    name: 'selected',
    message: 'Do you want to quit Credential Manager',
    choices: [{
      value: 'exit',
      name: 'Quit Credential Manager'
    }, {
      value: 'mainpage',
      name: 'Go back to experience overview.'
    }]
  }]);

  if (selected === 'exit') {
    process.exit(0);
  }

  return mainpage;
}
//# sourceMappingURL=../../__sourcemaps__/credentials/views/Select.js.map