jQuery(document).ready(function ($) {
    'use strict';

    /**
     * Add an event
     * @param event
     * @param selector
     * @param callback
     * @param context
     */
    function rsssl_add_event(event, selector, callback ) {
        document.addEventListener(event, e => {
            if ( e.target.closest(selector) ) {
                callback(e);
            }
        });
    }


    //select2 dropdown
    var select2Dropdown = $('.rsssl-select2');
    if (select2Dropdown.length) {
        select2Dropdown.select2({
            //tags: true,
            width:'400px',
            placeholder: 'Select or Add',
            language: {
                noResults: function() {
                    return '<span id="rsssl-no-results-container">'+rsssl_wizard.no_results+'</span>';
                },
            },
            escapeMarkup: function(markup) {
                return markup;
            },
        });
    }

    $(document).on('click','#rsssl-no-results-container',function(){
        console.log("clicked");
        select2Dropdown.val('none');
        select2Dropdown.trigger('change');
        select2Dropdown.select2('close');
    });

    var copied_element = $('.rsssl-copied-feedback').html();
    $(document).on('click', '.rsssl-copy-content', function () {
        var type = $(this).data('item');
        var success;
        var data = $('.rsssl-'+type).text();
        var temp_element = $("<textarea>");
        $("body").append(temp_element);
        temp_element.val(data).select();
        try {
            success = document.execCommand("copy");
        } catch (e) {
            success = false;
        }
        temp_element.remove();
        if (success) {
            $('<span class="rsssl-copied-feedback-container">'+copied_element+'</span>').insertAfter($(this));
            setTimeout(function(){ $('.rsssl-copied-feedback-container').fadeOut('slow') }, 5000);
        }
    });

    function maybe_show_password_delete_questions(){
        var deletePasswordField = $('.field-group.store_credentials');
        if (deletePasswordField.length) {
            deletePasswordField.addClass('rsssl-hidden');
        }
        var passwordFields = $('.rsssl-password');
        if (deletePasswordField.length) {
            passwordFields.each(function(){
                if ( !$(this).hasClass('rsssl-hidden') ) {
                    console.log('is hidden field');
                    deletePasswordField.removeClass('rsssl-hidden');
                }
            });

        }
    }


    //remove alerts
    window.setTimeout(function () {
        $(".rsssl-hide").fadeTo(500, 0).slideUp(500, function () {
            $(this).remove();
        });
    }, 2000);

    function remove_after_change() {
        $(".rsssl-panel.rsssl-remove-after-change").fadeTo(500, 0).slideUp(500, function () {
            $(this).remove();
        });
    }

    /**
     *
     * On multiple fields, we check if all input type=text and textareas are filled
     *
     * */

    function rsssl_validate_multiple() {
        $('.multiple-field').each(function(){

            var completed=true;
            $(this).find('input[type=text]').each(function () {
                if ($(this).val()===''){
                    completed = false;
                }
            });

            $(this).find('textarea').each(function () {
                if ($(this).val()===''){
                    completed = false;
                }
            });

            var icon = $(this).closest('.rsssl-panel').find('.rsssl-multiple-field-validation i');
            if (completed){
                icon.removeClass('fa-times');
                icon.addClass('fa-check');
            } else {
                icon.addClass('fa-times');
                icon.removeClass('fa-check');
            }
        });
    }
    rsssl_validate_multiple()
    $(document).on('keyup', '.multiple-field input[type=text]', function () {
        rsssl_validate_multiple();
    });
    $(document).on('keyup', '.multiple-field textarea', function () {
        rsssl_validate_multiple();
    });


    //validation of checkboxes
    rsssl_validate_checkboxes();
    $(':checkbox').change(rsssl_validate_checkboxes);

    function rsssl_validate_checkboxes() {
        $('.rsssl-validate-multicheckbox').each(function (i) {
            var set_required = [];
            var all_unchecked = true;
            $(this).find(':checkbox').each(function (i) {

                set_required.push($(this));

                if ($(this).is(':checked')) {
                    all_unchecked = false;
                }
            });
            var container = $(this).closest('.field-group').find('.rsssl-label');
            if (all_unchecked) {
                container.removeClass('valid-multicheckbox');
                container.addClass('invalid-multicheckbox');
                $.each(set_required, function (index, item) {
                    item.prop('required', true);
                    item.addClass('is-required');
                });

            } else {
                container.removeClass('invalid-multicheckbox');
                container.addClass('valid-multicheckbox');
                $.each(set_required, function (index, item) {
                    item.prop('required', false);
                    item.removeClass('is-required');
                });
            }

        });

        //now apply the required.

        check_conditions();
    }

    $(document).on('change', 'input', function (e) {
        check_conditions();
        remove_after_change();
    });

    $(document).on('keyup', 'input', function (e) {
        check_conditions();
        remove_after_change();
    });

    $(document).on('change', 'select', function (e) {
        check_conditions();
        remove_after_change();
    });

    $(document).on('change', 'textarea', function (e) {
        check_conditions();
        remove_after_change();
    });

    $(document).on('keyup', 'textarea', function (e) {
        remove_after_change();
    });

    $(document).on('click', 'button', function (e) {
        remove_after_change();
    });

    if ($("input[name=step]").val() == 2) {
        setTimeout(function () {
            if (typeof tinymce !== 'undefined') {
                for (var i = 0; i < tinymce.editors.length; i++) {
                    tinymce.editors[i].on('NodeChange keyup', function (ed, e) {
                        remove_after_change();
                    });
                }
            }
        }, 5000);
    }


    $(document).on("rssslRenderConditions", check_conditions);

    /*conditional fields*/
    function check_conditions() {
        var value;
        var showIfConditionMet = true;

        $(".condition-check-1").each(function (e) {

            var i;
            for (i = 1; i < 4; i++) {
                var question = 'rsssl_' + $(this).data("condition-question-" + i);
                var condition_type = 'AND';

                if (question == 'rsssl_undefined') return;

                var condition_answer = $(this).data("condition-answer-" + i);

                //remove required attribute of child, and set a class.
                var input = $(this).find('input[type=checkbox]');
                if (!input.length) {
                    input = $(this).find('input');
                }
                if (!input.length) {
                    input = $(this).find('textarea');
                }
                if (!input.length) {
                    input = $(this).find('select');
                }

                if (input.length && input[0].hasAttribute('required')) {
                    input.addClass('is-required');
                }

                //cast into string
                condition_answer += "";

                if (condition_answer.indexOf('NOT ') !== -1) {
                    condition_answer = condition_answer.replace('NOT ', '');
                    showIfConditionMet = false;
                } else {
                    showIfConditionMet = true;
                }
                var condition_answers = [];
                if (condition_answer.indexOf(' OR ') !== -1) {
                    condition_answers = condition_answer.split(' OR ');
                    condition_type = 'OR';
                } else {
                    condition_answers = [condition_answer];
                }

                var container = $(this);
                var conditionMet = false;
                condition_answers.forEach(function (condition_answer) {
                    value = get_input_value(question);

                    if ($('select[name=' + question + ']').length) {
                        value = Array($('select[name=' + question + ']').val());
                    }

                    if ($("input[name='" + question + "[" + condition_answer + "]" + "']").length) {
                        if ($("input[name='" + question + "[" + condition_answer + "]" + "']").is(':checked')) {
                            conditionMet = true;
                            value = [];
                        } else {
                            conditionMet = false;
                            value = [];
                        }
                    }
                    if (showIfConditionMet) {

                        //check if the index of the value is the condition, or, if the value is the condition
                        if (conditionMet || value.indexOf(condition_answer) != -1 || (value == condition_answer) || (condition_answer==='EMPTY' && value=='') ) {

                            container.removeClass("rsssl-hidden");
                            //remove required attribute of child, and set a class.
                            if (input.hasClass('is-required')) input.prop('required', true);
                            //prevent further checks if it's an or/and statement
                            conditionMet = true;
                        } else {
                            container.addClass("rsssl-hidden");
                            if (input.hasClass('is-required')) input.prop('required', false);
                        }
                    } else {

                        if (conditionMet || value.indexOf(condition_answer) != -1 || (value == condition_answer) || (condition_answer==='EMPTY' && value=='') ) {
                            container.addClass("rsssl-hidden");
                            if (input.hasClass('is-required')) input.prop('required', false);
                        } else {
                            container.removeClass("rsssl-hidden");
                            if (input.hasClass('is-required')) input.prop('required', true);
                            conditionMet = true;
                        }
                    }
                });
                if (!conditionMet) {
                    break;
                }
            }
        });
        maybe_show_password_delete_questions();

    }


    /**
     get checkbox values, array proof.
     */

    function get_input_value(fieldName) {
        var input = $('input[name=' + fieldName + ']');
        if (input.attr('type') === 'text' || input.attr('type') === 'password') {
            return input.val();
        } else {
            var checked_boxes = [];
            $('input[name=' + fieldName + ']:checked').each(function () {
                checked_boxes[checked_boxes.length] = $(this).val();
            });
            return checked_boxes;
        }
    }

});