;(function ($, window, document, undefined) {

    /**
     * 数据选择器模块
     * @param $trigger
     * @param option
     * @constructor
     */
    function selectData($trigger, option) {
        var defaults = {
            title: '',              // 弹窗标题
            uri: '',                // api uri
            duplicate: true,        // 是否允许重复数据
            dataIndex: '',          // 数据索引名称 例如: goods_id, 用于验证数据是否重复
            getExistData: $.noop()  // 获取已存在数据接口函数
        };
        this.options = $.extend({}, defaults, option);
        // 初始化对象事件
        this.init($trigger);
    }

    selectData.prototype = {

        /**
         * 初始化
         */
        init: function ($trigger) {
            var _this = this;
            if ($trigger === false) {
                _this.showModal();
                return false;
            }
            // 选择器触发事件
            $trigger.unbind().click(function () {
                _this.showModal();
            });
        },

        /**
         * 显示数据选择弹窗
         */
        showModal: function () {
            var _this = this;
            // 捕获页
            layer.open({
                type: 2
                , id: _this.options.layerId
                , title: _this.options.title
                , skin: 'modal-select-data'
                , area: ['840px', '520px']
                , offset: 'auto'
                , anim: 1
                , closeBtn: 1
                , shade: 0.3
                , btn: ['确定', '取消']
                , content: STORE_URL + '/data.' + this.options.uri
                , success: function (layero) {
                    // 初始化文件库弹窗
                    _this.initModal(layero);
                }
                , yes: function (index, layero) {
                    var iframeWin = window[layero.find('iframe')[0]['name']]
                        , selectedData = iframeWin.getSelectedData()    // 选择的数据
                        , newData = _this.duplicateData(selectedData);  // 去除重复
                    // 执行回调函数
                    if (newData && typeof _this.options.done === 'function') {
                        _this.options.done(JSON.parse(JSON.stringify(newData)), this.$touch);
                    }
                    layer.close(index);
                }
            });
        },

        /**
         * 筛选重复数据
         * @param selectedData
         */
        duplicateData: function (selectedData) {
            var _this = this;
            if (!selectedData.length) {
                return false;
            }
            if (_this.options.duplicate !== false) {
                return selectedData;
            }
            if (_this.options.dataIndex === '') {
                console.error('dataIndex is not defined');
                return false;
            }
            var existData = _this.options.getExistData.call(true);
            if (!existData.length) {
                return selectedData;
            }
            var newData = [];
            selectedData.forEach(function (item) {
                if (existData.indexOf(item[_this.options.dataIndex]) === -1) {
                    newData.push(item);
                    existData.push(item[_this.options.dataIndex]);
                }
            });
            return newData;
        },

        /**
         * 初始弹窗
         */
        initModal: function (element) {
            var _this = this;
            _this.$element = element;
        }

    };

    /**
     * 在Jquery插件中使用selectData对象
     * @param options
     * @returns {selectData}
     */
    $.fn.selectData = function (options) {
        return new selectData(this, options);
    };

    /**
     * 在Jquery插件中使用selectData对象
     * @param options
     * @returns {selectData}
     */
    $.selectData = function (options) {
        return new selectData(false, options);
    };

})(jQuery, window, document);
