/*global URLify*/
"use strict";
{
    const $ = django.jQuery;
    $.fn.prepopulate = function (dependencies, maxLength, allowUnicode) {
        /*
            Depends on urlify.js
            Populates a selected field with the values of the dependent fields,
            URLifies and shortens the string.
            dependencies - array of dependent fields ids
            maxLength - maximum length of the URLify'd string
            allowUnicode - Unicode support of the URLify'd string
        */
        return this.each(function () {
            const prepopulatedField = $(this);

            const populate = function () {
                // Bail if the field's value has been changed by the user
                if (prepopulatedField.data("_changed")) {
                    return;
                }

                const values = [];
                $.each(dependencies, function (i, field) {
                    field = $(field);
                    if (field.val().length > 0) {
                        values.push(field.val());
                    }
                });
                prepopulatedField.val(
                    URLify(values.join(" "), maxLength, allowUnicode),
                );
            };

            prepopulatedField.data("_changed", false);
            prepopulatedField.on("change", function () {
                prepopulatedField.data("_changed", true);
            });

            if (!prepopulatedField.val()) {
                $(dependencies.join(",")).on("keyup change focus", populate);
            }
        });
    };
}
