var $ = jQuery.noConflict();
$(document).ready(function ($) {
    var currentContainer;
    var currentRowId;
    var currentColumnType;

    $('.icp-auto').iconpicker();
    
    $('body').on('click', '#wpdiscuz_form_add_row', function () {
        wpdiscuzForm.addRow('#wpd-form-sortable-rows');
        wpdFormFieldSortable();
    });

    $('body').on('click', '.wpd-form-row-wrap .wpd-form-row-actions .fa-columns', function () {
        wpdiscuzForm.formTwoColumn($(this));
        wpdFormFieldSortable();
    });

    $('body').on('click', '.wpd-form-row-wrap .wpd-form-row-actions .fa-trash-alt', function () {
         if($(this).parents('.wpd-form-row-wrap').find('.wpd-default-field').length){
            alert(wpdFormAdminOptions.can_not_delete_field);
            return;
        }
        if (confirm(wpdFormAdminOptions.confirm_delete_message)) {
            $(this).parents('.wpd-form-row-wrap').remove();
        }
    });

    $('body').on('click', '.wpd-form-add-filed', function () {
        currentRowId = $(this).parents('.wpd-form-row-wrap').attr('id');
        currentColumnType = 'full';
        if ($(this).parents('.wpd-form-col').hasClass('left-col')) {
            currentColumnType = 'left';
        } else if ($(this).parents('.wpd-form-col').hasClass('right-col')) {
            currentColumnType = 'right';
        }
        currentContainer = $(this).parents('.wpd-form-col').find('.col-body');
        tb_show(wpdFormAdminOptions.wpd_form_fields, ajaxurl + "?action=wpdiscuzCustomFields&_wpnonce=" + wpdFormAdminOptions.nonce + "&width=700&height=400");
        return false;
    });

    $('body').on('click', '.wpd-field .fa-trash-alt', function () {
        if (confirm(wpdFormAdminOptions.confirm_delete_message)) {
            $(this).parents('.wpd-field').remove();
        }
    });

    $('body').on('click', '.wpd-field .fa-pencil-alt', function () {
        $(this).parents('.wpd-field').find('.wpd-field-body').toggle(500);
    });

    $('body').on('click', '.wpd-field-button', function () {
        var fieldType = $(this).attr('id');
        var fieldTitle = $(this).text();
        var defaultField = '0';
        if ($(this).hasClass('wpdDefaultField')) {
            defaultField = 1;
        }
        wpdFieldLoad();
        $.ajax({
            type: 'POST',
            url: ajaxurl,
            data: {
                action: 'adminFieldForm',
                security: wpdFormAdminOptions.nonce,
                fieldType: fieldType,
                row: currentRowId,
                col: currentColumnType,
                defaultField: defaultField
            }
        }).done(function (response) {
            $('#TB_ajaxWindowTitle').text(fieldTitle);
            $('#TB_ajaxContent').html(response);
            $('.icp-auto').iconpicker();
        });
    });

    $('body').on('click', '#wpd-add-field-button', function () {
        var tbForm = $('#TB_ajaxContent_form');
        tbForm.submit(function (event) {
            event.preventDefault();
        });
        if (tbForm[0].checkValidity()) {
            var fieldName = $(this).parents('#TB_ajaxContent').find('.wpd-field-body .wpd-field-name').val();
            var dialogFieldHtml = $(this).parents('#TB_ajaxContent').find('.wpd-field-body');
            var dynamicFiledCont = $('<div class="wpd-col-full wpd-field">' +
                    '<div class="wpd-field-head">' + fieldName +
                    '<div class="wpd-field-actions">' +
                    '<i class="fas fa-pencil-alt" title="' + wpdFormAdminOptions.edit_field + '"></i>|' +
                    '<i class="fas fa-trash-alt" title="' + wpdFormAdminOptions.delete + '"></i>' +
                    '</div></div></div>');
            dialogFieldHtml.hide();
            dialogFieldHtml.appendTo(dynamicFiledCont);
            dynamicFiledCont.appendTo(currentContainer);
            wpdFormFieldSortable();
            tb_remove();
        }
    });


    wpdFormRowSortable();
    wpdFormFieldSortable();

    /*========================= FUNCTIONS ==================================== */

    function wpdFormRowSortable() {
        $('#wpd-form-sortable-rows').sortable({
            containment: '.wpd-form',
            cancel: '.wpd-form-row-body,.fa-columns, .fa-trash-alt',
            update: function (event, ui) {
                ui.item.find('.row_order').val(ui.item.index());
                wpdiscuzForm.rebuildRowsData('#wpd-form-sortable-rows', '.wpd-form-row-wrap', 'wpd-form-row-wrap');
            }
        });
    }

    function wpdFormFieldSortable() {
        $('.col-body').sortable({
            connectWith: '.col-body',
            containment: '.wpd-form',
            cancel: '.fas, .wpd-field-body',
            update: function (event, ui) {
                wpdiscuzForm.afterFieldDrag(ui.item);
            }
        });
    }



    function wpdFieldLoad() {
        $('#TB_ajaxContent').html('<img class="wpdFieldLoad" src="' + wpdFormAdminOptions.loaderImg + '">');
    }
    $('body').on('click', '.wpd-advaced-options-title', function(){
         $(this).next('.wpd-advaced-options-cont').toggle();
    });
});
//=====================  OBJECT ========================== //

var wpdiscuzForm = {
    /**
     * @param {string} selector Container where should be added row
     */
    addRow: function (selector) {
        $(selector).append('<div  class="wpd-form-row-wrap">' +
                '<input class="column_type" type="hidden" value="full"/>' +
                '<input class="row_order" type="hidden" name=""/>' +
                '<div class="wpd-form-row-head">' +
                '<div class="wpd-form-row-actions">' +
                '<i class="fas fa-columns" title="' + wpdFormAdminOptions.two_column + '"></i>|' +
                '<i class="fas fa-trash-alt" title="' + wpdFormAdminOptions.delete + '"></i>|' +
                '<i class="fas fa-arrows-alt" title="' + wpdFormAdminOptions.move + '"></i>' +
                '</div></div>' +
                '<div  class="wpd-form-row">' +
                '<div class="wpd-form-row-body">' +
                '<div class="full-col wpd-form-col">' +
                '<div class="col-body"></div>' +
                '<div class="wpd-form-add-filed">' +
                '<i class="fas fa-plus" title="' + wpdFormAdminOptions.add_field + '">' +
                '</div></div>' +
                '</div></div></div>');
        wpdiscuzForm.rebuildRowsData(selector, '.wpd-form-row-wrap', 'wpd-form-row-wrap');

    },
    rebuildRowsData: function (container, selector, idPrefix) {
        $(container + ' ' + selector).each(function (index, element) {
            var dynamicId = idPrefix + '_' + index;
            $(this).attr('id', dynamicId);
            $(this).find('.column_type').attr('name', wpdFormAdminOptions.wpdiscuz_form_structure + '[' + dynamicId + '][column_type]');
            $(this).find('.row_order').attr('name', wpdFormAdminOptions.wpdiscuz_form_structure + '[' + dynamicId + '][row_order]');
            $(this).find('.row_order').attr('value', index);
            $('input , textarea', $(this)).each(function () {
                var oldRowName = $(this).attr('name');
                if (oldRowName) {
                    var newRowName = oldRowName.replace(new RegExp(wpdFormAdminOptions.wpdiscuz_form_structure + '\\[[^\\]]+\\]' ,'g'), wpdFormAdminOptions.wpdiscuz_form_structure  + '[' + dynamicId + ']');
                    $(this).attr('name', newRowName);
                }
            });
        });
    },
    formTwoColumn: function (obj) {
        var rowWrap = obj.parents('.wpd-form-row-wrap');
        var row = rowWrap.find('.wpd-form-row>.wpd-form-row-body');
        var colNewName = 'full';
        var colNewType = 'full';
        if (row.hasClass('two-col')) {
            var rigthColumnHtml = $('.right-col>.col-body', row).html();
            var leftColumn = $('.left-col', row);
            $('.right-col', row).remove();
            $('.col-body', leftColumn).append(rigthColumnHtml);
            leftColumn.removeClass('left-col');
            leftColumn.addClass('full-col');
        } else {
            var fullColumn = $('.full-col', row);
            fullColumn.removeClass('full-col');
            fullColumn.addClass('left-col');
            fullColumn.after('<div class="right-col wpd-form-col">' +
                    '<div class="col-body"></div>' +
                    '<div class="wpd-form-add-filed">' +
                    '<i class="fas fa-plus" title="' + wpdFormAdminOptions.add_field + '">' +
                    '</div></div>');
            colNewName = 'left';
            colNewType = 'two';
        }
        obj.toggleClass("wpd-form-columns-two");
        row.toggleClass("two-col");
        rowWrap.find('.column_type').val(colNewType);
        wpdiscuzForm.replaceColName(colNewName, rowWrap.attr('id'), row);
    },
    replaceColName: function (colNewName, parentRowId, obj) {
        $('input , textarea', obj).each(function () {
            var oldRowName = $(this).attr('name');
            if (oldRowName) {
                var newRowName = oldRowName.replace(new RegExp(wpdFormAdminOptions.wpdiscuz_form_structure + '\\[[^\\]]+\\]\\[[^\\]]+\\]' ,'g'), wpdFormAdminOptions.wpdiscuz_form_structure + '[' + parentRowId + '][' + colNewName + ']');
                $(this).attr('name', newRowName);
            }
        });
    },
    afterFieldDrag: function (obj) {
        var parentRowId = obj.parents('.wpd-form-row-wrap').attr('id');
        var parentColName = 'full';
        if (obj.parents('.wpd-form-col').hasClass('left-col')) {
            parentColName = 'left';
        } else if (obj.parents('.wpd-form-col').hasClass('right-col')) {
            parentColName = 'right';
        }
        wpdiscuzForm.replaceColName(parentColName, parentRowId, obj);
    }
};