exports.build_realm_logo_widget = function (upload_function, is_night) {
    let logo_section_id = '#day-logo-section';
    if (is_night) {
        logo_section_id = '#night-logo-section';
    }

    const delete_button_elem = $(logo_section_id + " .realm-logo-delete-button");
    const file_input_elem = $(logo_section_id + " .realm-logo-file-input");
    const file_input_error_elem = $(logo_section_id + " .realm-logo-file-input-error");
    const upload_button_elem = $(logo_section_id + " .realm-logo-upload-button");

    const get_file_input = function () {
        return file_input_elem.expectOne();
    };

    if (!page_params.is_admin) {
        return;
    }

    if (page_params.realm_logo_source === 'D') {
        delete_button_elem.hide();
    } else {
        delete_button_elem.show();
    }

    const data = {night: JSON.stringify(is_night)};
    delete_button_elem.on('click', function (e) {
        e.preventDefault();
        e.stopPropagation();
        channel.del({
            url: '/json/realm/logo',
            data: data,
        });
    });

    return upload_widget.build_direct_upload_widget(
        get_file_input,
        file_input_error_elem.expectOne(),
        upload_button_elem.expectOne(),
        upload_function,
        page_params.max_logo_file_size
    );
};

function change_logo_delete_button(logo_source, logo_delete_button, file_input) {
    if (logo_source === 'U') {
        logo_delete_button.show();
    } else {
        logo_delete_button.hide();
        // Need to clear input because of a small edge case
        // where you try to upload the same image you just deleted.
        file_input.val('');
    }
}

exports.rerender = function () {
    const file_input = $("#day-logo-section .realm-logo-file-input");
    const night_file_input = $("#night-logo-section .realm-logo-file-input");
    $("#day-logo-section .realm-logo-img").attr("src", page_params.realm_logo_url);

    if (page_params.realm_night_logo_source === 'D' &&
            page_params.realm_logo_source !== 'D') {
        // If no night mode logo is uploaded but a day mode one
        // is, use the day mode one; this handles the common case
        // of transparent background logos that look good on both
        // night and day themes.  See also similar code in admin.js.

        $("#night-logo-section .realm-logo-img").attr("src", page_params.realm_logo_url);
    } else {
        $("#night-logo-section .realm-logo-img").attr("src", page_params.realm_night_logo_url);
    }

    if (page_params.night_mode && page_params.realm_night_logo_source !== 'D') {
        $("#realm-logo").attr("src", page_params.realm_night_logo_url);
    } else {
        $("#realm-logo").attr("src", page_params.realm_logo_url);
    }

    change_logo_delete_button(page_params.realm_logo_source,
                              $("#day-logo-section .realm-logo-delete-button"),
                              file_input);
    change_logo_delete_button(page_params.realm_night_logo_source,
                              $("#night-logo-section .realm-logo-delete-button"),
                              night_file_input);
};

window.realm_logo = exports;
