/* μlogger
 *
 * Copyright(C) 2017 Bartek Fabiszewski (www.fabiszewski.net)
 *
 * This is free software; you can redistribute it and/or modify it under
 * the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, see <http://www.gnu.org/licenses/>.
 */

function addUser() {
  var form = '<form id="userForm" method="post" onsubmit="submitUser(\'add\'); return false">';
  form += '<label><b>' + lang['username'] + '</b></label><input type="text" placeholder="' + lang['usernameenter'] + '" name="login" required>';
  form += '<label><b>' + lang['password'] + '</b></label><input type="password" placeholder="' + lang['passwordenter'] + '" name="pass" required>';
  form += '<label><b>' + lang['passwordrepeat'] + '</b></label><input type="password" placeholder="' + lang['passwordenter'] + '" name="pass2" required>';
  form += '<div class="buttons"><button type="button" onclick="removeModal()">' + lang['cancel'] + '</button><button type="submit">' + lang['submit'] + '</button></div>';
  form += '</form>';
  showModal(form);
}

function editUser() {
  var userForm = document.getElementsByName('user')[0];
  var userLogin = (userForm !== undefined) ? userForm.options[userForm.selectedIndex].text : auth;
  if (userLogin == auth) {
    alert(lang['selfeditwarn']);
    return;
  }
  var message = '<div style="float:left">' + sprintf(lang['editinguser'], '<b>' + htmlEncode(userLogin) + '</b>') + '</div>';
  message += '<div class="red-button"><b><a href="javascript:void(0);" onclick="submitUser(\'delete\'); return false">' + lang['deluser'] + '</a></b></div>';
  message += '<div style="clear: both; padding-bottom: 1em;"></div>';

  var form = '<form id="userForm" method="post" onsubmit="submitUser(\'update\'); return false">';
  form += '<input type="hidden" name="login" value="' + htmlEncode(userLogin) + '">';
  form += '<label><b>' + lang['password'] + '</b></label><input type="password" placeholder="' + lang['passwordenter'] + '" name="pass" required>';
  form += '<label><b>' + lang['passwordrepeat'] + '</b></label><input type="password" placeholder="' + lang['passwordenter'] + '" name="pass2" required>';
  form += '<div class="buttons"><button type="button" onclick="removeModal()">' + lang['cancel'] + '</button><button type="submit">' + lang['submit'] + '</button></div>';
  form += '</form>';
  showModal(message + form);
}

function confirmedDelete(login) {
  return confirm(sprintf(lang['userdelwarn'], '"' + login + '"'));
}

function submitUser(action) {
  var form = document.getElementById('userForm');
  var login = form.elements['login'].value.trim();
  if (!login) {
      alert(lang['allrequired']);
      return;
  }
  var pass = null;
  var pass2 = null;
  if (action != 'delete') {
    pass = form.elements['pass'].value;
    pass2 = form.elements['pass2'].value;
    if (!pass || !pass2) {
      alert(lang['allrequired']);
      return;
    }
    if (pass != pass2) {
      alert(lang['passnotmatch']);
      return;
    }
    if (!pass_regex.test(pass)) {
      alert(lang['passlenmin'] + '\n' + lang['passrules']);
      return;
    }
  } else {
    if (!confirmedDelete(login)) {
      return;
    }
  }
  var xhr = getXHR();
  xhr.onreadystatechange = function() {
    if (xhr.readyState == 4) {
      var error = true;
      var message = '';
      if (xhr.status == 200) {
        var xml = xhr.responseXML;
        if (xml) {
          var root = xml.getElementsByTagName('root');
          if (root.length && getNode(root[0], 'error') == 0) {
            removeModal();
            alert(lang['actionsuccess']);
            if (action == 'delete') {
              // select current user in users form
              var f = document.getElementsByName('user')[0];
              f.remove(f.selectedIndex);
              selectUser(f);
            }
            error = false;
          } else if (root.length) {
            errorMsg = getNode(root[0], 'message');
            if (errorMsg) { message = errorMsg; }
          }
        }
      }
      if (error) {
        alert(lang['actionfailure'] + '\n' + message);
      }
      xhr = null;
    }
  }
  xhr.open('POST', 'utils/handleuser.php', true);
  xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  var params = 'action=' + action + '&login=' + encodeURIComponent(login) + '&pass=' + encodeURIComponent(pass);
  params = params.replace(/%20/g, '+');
  xhr.send(params);
  return;
}