$(document).ready(function () {
    $('#chgBtn').on('click', function () {
        var user_name = $('#inputUser').val();
        var old_pwd = $('#inputOldPassword').val();
        var new_pwd = $('#inputNewPassword').val();
        var chk_pwd = $('#inputChkPassword').val();

        if (pwdStrengthChecke(new_pwd, 6, 2) === false) {
            alert("新密碼強度不足，請至少包含英文小寫、英文大寫、阿拉伯數字、特殊符號四項中的2項，且長度至少為6個字元!");
            return;
        }

        if (!confirm('請注意，Windows的密碼與公槽密碼是連動的，更改後登入Windows與登入公槽的密碼會跟著一起改!')) {
            
            return;
        }

        if (new_pwd != chk_pwd) {
            alert("新密碼與新密碼再確認不一致!");
            return;
        }

        var formData = {
            user_name: user_name,
            old_password: old_pwd,
            new_password: new_pwd
        }

        $.ajax({
            url: "/Api/ChangeADPassword",
            type: "POST",
            data: formData,
            success: function (data, textStatus, jqXHR) {
                if (data.ret === "yes") {

                    alert("密碼修改成功!");
                    $('#inputUser').val('');
                    $('#inputOldPassword').val('');
                    $('#inputNewPassword').val('');
                    $('#inputChkPassword').val('');

                } else {
                    alert(data.message);
                }
            },
            error: function (jqXHR, textStatus, errorThrown) {
                alert('網路或伺服器發生錯誤，請稍後重試!');
            }
        });
    });
});

/**
 * 檢查輸入的密碼強度，先檢查密碼是否達到指定的長度，
 * 再檢查是否有達成包含「英文小寫、英文大寫、阿拉伯數字、特殊符號」四個項目，可透過`strength`設定至少要符合多少項。
 * https://klab.tw/2023/01/check-password-strength-using-java-and-javascript/
 * @param {string} str - 要檢測的密碼文字
 * @param {number} length - 需要的密碼長度
 * @param {number} strength - 需要符合的項目數量，0到4
 * @returns 如果符合強度需求返回true
 */
function pwdStrengthChecke(str, length, strength) {
    if (!str || str.length < length) {
        return false
    }
    let n = 0
    const regex = [
        /[a-z]/,
        /[A-Z]/,
        /[0-9]/,
        /[`~!@#$%^&*()_+=,<>\-\[\]\{\}\:;\.'"\/\\?\|]/
    ]
    for (const r of regex) {
        if (str.match(r)) {
            n++
        }
    }
    return n >= strength
}