var settings_ui = (function () {

var exports = {};

exports.display_checkmark = function ($elem) {
    var check_mark = document.createElement("img");
    check_mark.src = "/static/images/checkbox-green.svg";
    $elem.prepend(check_mark);
    $(check_mark).css("width", "13px");
};

exports.strings = {};
function _initialize() {
    exports.strings = {
        success: i18n.t("Saved"),
        failure: i18n.t("Save failed"),
        saving: i18n.t("Saving"),
    };
}

exports.initialize = function () {
    i18n.ensure_i18n(_initialize);
};

// Generic function for informing users about changes to the settings
// UI.  Intended to replace the old system that was built around
// direct calls to `ui_report`.
exports.do_settings_change = function (request_method, url, data, status_element, opts) {
    var success;
    var success_msg;
    var success_continuation;
    var error;
    var spinner = $(status_element).expectOne();
    if (opts !== undefined) {
        success = opts.success;
        success_msg = opts.success_msg;
        success_continuation = opts.success_continuation;
        error = opts.error;
    }
    if (success_msg === undefined) {
        success_msg = exports.strings.success;
    }
    if (success === undefined) {
        loading.make_indicator(spinner, {text: exports.strings.saving});
        success = function (reponse_data) {
            ui_report.success(success_msg, $(status_element).expectOne());
            settings_ui.display_checkmark(spinner);
            if (success_continuation !== undefined) {
                success_continuation(reponse_data);
            }
        };
    }
    if (error === undefined) {
        error = function (xhr) {
            ui_report.error(exports.strings.failure, xhr, $(status_element).expectOne());
        };
    }

    request_method({
        url: url,
        data: data,
        success: success,
        error: error,
    });
};

// This function is used to disable sub-setting when main setting is checked or unchecked
// or two settings are inter-dependent on their values values.
// * is_checked is boolean, shows if the main setting is checked or not.
// * sub_setting_id is sub setting or setting which depend on main setting,
//   string id of setting.
// * disable_on_uncheck is boolean, true if sub setting should be disabled
//   when main setting unchecked.
exports.disable_sub_setting_onchange = function (is_checked, sub_setting_id, disable_on_uncheck) {
    if ((is_checked && disable_on_uncheck) || (!is_checked && !disable_on_uncheck)) {
        $("#" + sub_setting_id).attr("disabled", false);
        $("#" + sub_setting_id + "_label").parent().removeClass("control-label-disabled");
    } else if ((is_checked && !disable_on_uncheck) || (!is_checked && disable_on_uncheck)) {
        $("#" + sub_setting_id).attr("disabled", "disabled");
        $("#" + sub_setting_id + "_label").parent().addClass("control-label-disabled");
    }
};

return exports;
}());

if (typeof module !== 'undefined') {
    module.exports = settings_ui;
}
