
function extensions_apply(_disabled_list, _update_list, disable_all){
    var disable = []
    var update = []

    gradioApp().querySelectorAll('#extensions input[type="checkbox"]').forEach(function(x){
        if(x.name.startsWith("enable_") && ! x.checked)
            disable.push(x.name.substring(7))

        if(x.name.startsWith("update_") && x.checked)
            update.push(x.name.substring(7))
    })

    restart_reload()

    return [JSON.stringify(disable), JSON.stringify(update), disable_all]
}

function extensions_check(){
    var disable = []

    gradioApp().querySelectorAll('#extensions input[type="checkbox"]').forEach(function(x){
        if(x.name.startsWith("enable_") && ! x.checked)
            disable.push(x.name.substring(7))
    })

    gradioApp().querySelectorAll('#extensions .extension_status').forEach(function(x){
        x.innerHTML = "Loading..."
    })


    var id = randomId()
    requestProgress(id, gradioApp().getElementById('extensions_installed_top'), null, function(){

    })

    return [id, JSON.stringify(disable)]
}

function install_extension_from_index(button, url){
    button.disabled = "disabled"
    button.value = "Installing..."

    var textarea = gradioApp().querySelector('#extension_to_install textarea')
    textarea.value = url
    updateInput(textarea)

    gradioApp().querySelector('#install_extension_button').click()
}

function config_state_confirm_restore(_, config_state_name, config_restore_type) {
    if (config_state_name == "Current") {
        return [false, config_state_name, config_restore_type];
    }
    let restored = "";
    if (config_restore_type == "extensions") {
        restored = "all saved extension versions";
    } else if (config_restore_type == "webui") {
        restored = "the webui version";
    } else {
        restored = "the webui version and all saved extension versions";
    }
    let confirmed = confirm("Are you sure you want to restore from this state?\nThis will reset " + restored + ".");
    if (confirmed) {
        restart_reload();
        gradioApp().querySelectorAll('#extensions .extension_status').forEach(function(x){
            x.innerHTML = "Loading..."
        })
    }
    return [confirmed, config_state_name, config_restore_type];
}
