<html lang="en">
<head>
    <title>Apache Ignite Teamcity Bot - User preferences</title>
    <link rel="icon" href="img/leaf-icon-png-7066.png">
    <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
    <link rel="stylesheet" href="https://cdn.datatables.net/1.10.16/css/jquery.dataTables.min.css">
    <link rel="stylesheet" href="css/style-1.5.css">

    <script src="https://code.jquery.com/jquery-1.12.4.js"></script>
    <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>
    <script src="https://cdn.datatables.net/1.10.16/js/jquery.dataTables.js"></script>
    <script src="https://cdn.datatables.net/1.10.16/js/dataTables.jqueryui.js"></script>

    <script src="js/common-1.6.js"></script>
</head>
<body>

<script>
$(document).ready(function() {
    $(document).tooltip();
    loadData();

    var username = findGetParameter("username");

    $.ajax({
        url: "rest/branches/version",
        success: showVersionInfo,
        error: showErrInLoadStatus
    });

    setupAddDialog();
    setupEditDialog();
});

function setupAddDialog() {
    dialog = $("#addCredDialogDiv").dialog({
        autoOpen: false,
        height: 400,
        width: 350,
        modal: true,
        buttons: {
            "Add Credentials": addServiceCreds,
            Cancel: function() {
                dialog.dialog("close");
            }
        },
        close: function() {
            form[0].reset();
        }
    });

    form = dialog.find("form").on("submit", function(event) {
        event.preventDefault();
        addServiceCreds();
    });

    $("#addCredsBtn").button().on("click", function() {
        dialog.dialog("open");
    });

    $("#resetCredsBtn").button().on("click", function() {
         confirmResetCreds();
    });
}

function confirmResetCreds() {
 $( "#dialogConfirmReset" ).dialog({
      resizable: false,
      height: "auto",
      width: 400,
      modal: true,
      buttons: {
        "Reset password and credentials": function() {
           doResetCreds();
            $( this ).dialog( "close" );
        },
        Cancel: function() {
          $( this ).dialog( "close" );
        }
      }
    });
}

function doResetCreds() {
    var url = "rest/user/resetCredentials";

    $.ajax({
        type: "POST",
        url: url,
        contentType: "application/x-www-form-urlencoded; charset=utf-8",
        success: function(data) {
             loadData();
        },
        error: showErrInLoadStatus
    });
}


function addServiceCreds() {
    var url = "rest/user/addService";

    $.ajax({
        type: "POST",
        url: url,
        data: $("#addCred").serialize(),
        success: function(data) {
            let addCredsStatus = $("#addCredsStatus");

            if(isDefinedAndFilled(data.result) && data.result.length>0) {
                addCredsStatus.html('Unable to add credentials [' + data.result + "]");

                return;
            }
            addCredsStatus.html("");

            dialog.dialog("close");

            loadData();
        },
        error: showErrInLoadStatus
    });
}


function parmsForRest() {
    var curReqParms = "";
    var login = findGetParameter("login");
    if (login != null) {
        curReqParms += "?login=" + login;
    }

    return curReqParms;
}

function loadData() {
    var curFailuresUrl = "rest/user/get" + parmsForRest();

    $("#loadStatus").html("<img src='https://www.wallies.com/filebin/images/loading_apple.gif' width=20px height=20px> Please wait");
    $.ajax({
        url: curFailuresUrl,
        success: function(result) {
            showData(result);
            $("#loadStatus").html("");
        },
        error: showErrInLoadStatus
    });
}

function setupEditDialog() {
    $("#btnSaveUserData").button().on("click", function() {
        sendUserData();
    });
 }

 function sendUserData() {
    var url = "rest/user/saveUserData";

    $.ajax({
        type: "POST",
        url: url,
        data: $("#userData").serialize(),
        success: function(data) {
            loadData();
        },
        error: showErrInLoadStatus
    });
 }

//see TcHelperUserUi java class
function showData(userUi) {
    $("#login").val(userUi.login);
    $("#fullName").val(userUi.fullName);
    $("#email").val(userUi.email);

    var res = "";
    if(isDefinedAndFilled(userUi.subscribedAllToBranchFailures)) {
        var map = userUi.subscribedAllToBranchFailures
        for (var key in map) {
           if (map.hasOwnProperty(key)) {

              res+="<input id='notify_"+key+"' name='notify_"+key+"' class='element checkbox' type='checkbox' value='1'";
              if(map[key]== true)
                    res+=" checked";

              res+="/>";

                res+="<label class='choice' for='notify_"+key+"'>Notify on all failures in "+key+"</label>";

                res+="<br>";
           }
        }
    }

    $("#notifyOnBranches").html(res);

    $("#serviceLogin").val(userUi.login);

    $('#serviceCreds').dataTable().fnDestroy();
    $('#serviceCreds').DataTable({
        data: userUi.data,
        columns: [{
                "data": "serviceId",
                title: "Service ID"
            },
            {
                "data": "serviceLogin",
                title: "login"
            },
            {
                "data": "servicePassword",
                title: "Password"
            }
        ]
    });
}
</script>

<div id="form_container">

    <form id="userData" class="appnitro">
        <div class="form_description">
            <h2>Teamcity helper User</h2>
            <p>User data and preferences</p>
        </div>
        <ul>
            <li>
                <label class="description" for="login">Login</label>
                <div>
                    <input id="login" name="login" class="element text medium" type="text" maxlength="255"
                           readonly/>
                </div>
            </li>
            <li>
                <label class="description" for="fullName">Full Name</label>
                <div>
                    <input id="fullName" name="fullName" class="element text medium" type="text" maxlength="255"
                           value=""/>
                </div>
            </li>
            <li>
                <label class="description" for="email">Email</label>
                <div>
                    <input id="email" name="email" class="element text medium" type="text" maxlength="255"
                           value=""/>
                </div>
            </li>
            <!--
            <li>
                <label class="description" for="email2">Additional Email</label>
                <div>
                    <input id="email2" name="email2" class="element text medium" type="text" maxlength="255"
                           value=""/>
                </div>
            </li>
            <li>
                <label class="description" for="slackid">Slack ID</label>
                <div>
                    <input id="slackid" name="slackid" class="element text medium" type="text" maxlength="255"
                           value=""/>
                </div>
            </li>

                <input id="element_5_1" name="element_5_1" class="element checkbox" type="checkbox" value="1"/>
                <label class="choice" for="element_5_1">Notify on build problems related to me</label>
                <input id="element_5_2" name="element_5_2" class="element checkbox" type="checkbox" value="1"/>
                <label class="choice" for="element_5_2">I agree to be responsible for MTCGA issues</label>

            -->

            <li>
                <label class="description">Tracked Branch Notification Preferences</label>

                <div id="notifyOnBranches"></div>
            </li>

            <li class="buttons">
                <input type="hidden" name="form_id" value="13472"/>

                <input id="btnSaveUserData" class="button_text" value="Save"/>
            </li>
        </ul>
    </form>


    <h3>Service credentials</h3>
    <div class="ui-widget">
        <table id="serviceCreds" class="ui-widget ui-widget-content">
            <thead>
            <tr class="ui-widget-header ">
                <th>Service Id</th>
                <th>Login</th>
                <th>Password</th>
            </tr>
            </thead>
        </table>
    </div>
    <button id="addCredsBtn">Add credentials</button>

    <button id="resetCredsBtn">Reset credentials</button>
</div>

<div id="loadStatus"></div>
<div id="version"></div>

<div style="visibility:none; position:absolute; top:-1000px">
    <div id="addCredDialogDiv" title="Add service credentials">
        <form id="addCred">
            <fieldset>
                <ul>
                    <li>

                    <li><label for="serviceId">Service ID</label>
                <input type="text" name="serviceId" id="serviceId"
                       class="text ui-widget-content ui-corner-all"></li>
                    <li><label for="serviceLogin">Login</label>
                <input type="text" name="serviceLogin" id="serviceLogin"
                       class="text ui-widget-content ui-corner-all"></li>
                    <li> <label for="servicePassword">Password</label>
                <input type="password" name="servicePassword" id="servicePassword"
                       class="text ui-widget-content ui-corner-all"></li>
                </ul>

                <div id="addCredsStatus"></div>
                <!-- Allow form submission with keyboard without duplicating the dialog button -->
                <input type="submit" tabindex="-1" style="position:absolute; top:-1000px">
            </fieldset>
        </form>
    </div>

    <div id="dialogConfirmReset" title="Reset password and remove services from account?">
        <p><span class="ui-icon ui-icon-alert" style="float:left; margin:12px 12px 20px 0;"></span>These items will be permanently deleted and cannot be recovered. Are you sure?</p>
    </div>
</div>
</body>
</html>