function getAccessbility(){
    let result = {
        supportAccessibility: false,
        accessibilityNode: false,
        loginTimes: 0,
        errloginlockNum: 0,
    }
    $.ajax({
        type : "POST",
        async : false,
        cache : false,
        url : "/html/web/a11y/api/getAccessibilityInfo.asp",
        success : function(data) {
            const obj = dealDataWithFun(data);
            const {supportAccessibility, accessibilityNode, loginTimes, errloginlockNum} = obj;
            result.supportAccessibility = supportAccessibility;
            result.accessibilityNode = accessibilityNode;
            result.loginTimes = loginTimes;
            result.errloginlockNum = errloginlockNum;
        }
    });
    return result;
}
 
function jumpLoginPage(){
    window.location = '/';
}
 
function toA11yPages(isChecked) {
    let sendData = isChecked ? "x.X_HW_WebAccAbility=1" : "x.X_HW_WebAccAbility=0";
    $.ajax({
        type: 'POST',
        async: false,
        cache: false,
        data: getDataWithToken(sendData),
        url: 'webcustomizectrl.cgi?x=InternetGatewayDevice.X_HW_DataModel.WebCustomizeCtrl&RequestFile=/',
        success: function (data) {
            return;
        },
        error: function (data) {
            setDisable('accessibility-switch', 0);
        }
    });
    setTimeout(()=> {jumpLoginPage();}, 1000);
}

function isLockedState() {
  const {loginTimes, errloginlockNum} = getAccessbility();
  return parseInt(loginTimes) >= parseInt(errloginlockNum);
}

function setLockedStyle() {
  $('#modeSwitch').css('opacity', 0.5);
}

function clickA11ySwitch() {
    let canExecute = true;
    let timeout;

    $('#accessibility-switch').on('click', function() {
        if (isLockedState()) {
            $(this).prop('checked', false);
            setLockedStyle();
            return;
        }
        if (canExecute) {
            let isChecked = $(this).is(':checked');
            setDisable('accessibility-switch', 1);
            toA11yPages(isChecked);
            
            canExecute = false;
            clearTimeout(timeout);
            timeout = setTimeout(() => {
                canExecute = true;
            }, 5000);
        }
    });
}

function generateSwitch(eleId, str = 'Accessibility Mode'){
    const {supportAccessibility, accessibilityNode} = getAccessbility();
    const switchBoxElement = document.getElementById(eleId);
    if(switchBoxElement && supportAccessibility){
        let checked = accessibilityNode ? 'checked' : '';
        const switchElement = `<div class="a11y-box"><span class="a11y-text">${str}</span><label class="switch"><input type="checkbox" id="accessibility-switch" ${checked} role="switch" aria-label="Accessibility Mode" tabindex="0"><span class="slider round" id="modeSwitch"><span class="text-12 nowrap" aria-hidden="true">ON</span><span class="text-12 nowrap" aria-hidden="true">OFF</span></span></label></div>`;
        const tempContainer = document.createElement('div');
        tempContainer.innerHTML = switchElement;
        switchBoxElement.appendChild(tempContainer.querySelector('.a11y-box'));
        clickA11ySwitch();
    }

    if (isLockedState()) {
        setLockedStyle();
        return;
    }
}
