/**
 * Service which exposes various methods for creating entities on the backend.
 */
angular.module('quay').factory('CreateService', ['ApiService', 'UserService', function(ApiService, UserService) {
  var createService = {};

  createService.createRobotAccount = function(ApiService, is_org, orgname, name, callback) {
    ApiService.createRobot(is_org ? orgname : null, null, {'robot_shortname': name})
              .then(callback, ApiService.errorDisplay('Cannot create robot account'));
  };

  createService.createOrganizationTeam = function(ApiService, orgname, teamname, callback) {
    var data = {
      'name': teamname,
      'role': 'member'
    };

    var params = {
      'orgname': orgname,
      'teamname': teamname
    };

    ApiService.updateOrganizationTeam(data, params)
              .then(callback, ApiService.errorDisplay('Cannot create team'));
  };

  createService.askCreateRobot = function(namespace, callback) {
    if (!namespace || !UserService.isNamespaceAdmin(namespace)) { return; }

    var isorg = UserService.isOrganization(namespace);
    bootbox.prompt('Enter the name of the new robot account', function(robotname) {
      if (!robotname) { return; }

      var regex = new RegExp(ROBOT_PATTERN);
      if (!regex.test(robotname)) {
        bootbox.alert('Invalid robot account name');
        return;
      }

      createService.createRobotAccount(ApiService, isorg, namespace, robotname, callback);
    });
  };

  createService.askCreateTeam = function(namespace, callback) {
    if (!namespace || !UserService.isNamespaceAdmin(namespace)) { return; }

    bootbox.prompt('Enter the name of the new team', function(teamname) {
      if (!teamname) { return; }

      var regex = new RegExp(TEAM_PATTERN);
      if (!regex.test(teamname)) {
        bootbox.alert('Invalid team name');
        return;
      }

      createService.createOrganizationTeam(ApiService, namespace, teamname,  callback);
    });
  };

  return createService;
}]);