/* 该组件对外提供的 扩展功能 */
export default {

    data:function () {
        return {
            base_flat_data:{
                data:[],
                skeleton: false
            },
            base_flat_page_size: 10,
            base_flat_remove:{length:0},  //  被删除的 data 因为 setData 不能 一次性渲染 非常多的 数据 所以 会提供一个 暂时删除的 数据表 请更具该对象自行处理
            base_flat_key:'id',   // 被删除的记录的唯一值
            base_flat_id:'flatIds',
            base_flat_keys_collect: false,
            base_flat_keys_unique:{},
            base_flat_keys:undefined,
            base_flat_row:1
        }
    },

    /* 页面初始化的时候触发 */
    mounted:function(){
        this.__base_flat_ref = this.$refs[this.base_flat_id];
    },

    methods:{
        flatIdGETIndex:function (id){
            return this.base_flat_keys_unique && this.base_flat_keys_unique[id];
        },

        /* 修改data */
        flatChangeData:function (data) {

            /* 如果 骨架模式不想等 将执行 重置数据 */
            if (this.base_flat_data.skeleton !== data.skeleton || data.clear) {

                let resultData = {...data};
                if (this.base_flat_row > 1) {
                    resultData.data = [];
                    for (let i=0,iCount = data.data.length;i<iCount;i++) {
                        let row = i%this.base_flat_row;
                        if (resultData.data[row] === undefined) resultData.data[row] = [];
                        resultData.data[row].push(data.data[i]);
                    }
                } else {
                    resultData = data;
                }

                this.base_flat_data = resultData;

                if (this.base_flat_remove.length > 0) {
                    /* 重置删除列表 */
                    this.base_flat_remove = {
                        length: 0
                    };
                }

                if (data.data.length <= 0 && this.__base_flat_ref) {
                    this.__base_flat_ref.setStatusApi(true);
                }
                data.data.map((item,index)=>{

                    this.base_flat_keys_unique[item[this.base_flat_key]] = index;
                    if (this.base_flat_keys_collect) {
                        if (!this.base_flat_keys) this.base_flat_keys = {};
                        this.base_flat_keys[item[this.base_flat_key]] = 1
                    }
                })

            } else {
                /* 否则 将为 添加数据 */
                let count = data.position;
                if (this.base_flat_row <= 1) {
                    for (let i=0,iCount = data.data.length;i<iCount;i++) {
                        this.$set(this.base_flat_data.data,(count + i),data.data[i]);
                        this.base_flat_keys_unique[data.data[i][this.base_flat_key]] = (count + i);
                    }
                } else {
                    for (let i=0,iCount = data.data.length;i<iCount;i++) {
                        let row = (count + i)%this.base_flat_row;
                        if (this.base_flat_data.data[row] === undefined) this.base_flat_data.data[row] = [];
                        this.$set(this.base_flat_data.data[row],(this.data.base_flat_data.data[row].length),data.data[i]);
                    }
                }

                if (this.base_flat_keys_collect) {
                    data.data.map((item)=> this.base_flat_keys[item[this.base_flat_key]] = 1);
                }


            }

        },

        /* 鉴定ID是否存在 */
        flatHasOwnPropertyID(id){
            if (this.base_flat_keys) {
                return  this.base_flat_keys[id];
            } else {
                return false;
            }
        },

        /* 移除某一个数据 */
        flatSplice:function (index,id) {

            if (id) {
                if (!this.base_flat_data[index]) {
                    /* 记录数量增加 */
                    this.base_flat_remove.length++;
                    if ((this.base_flat_data.data.length - this.base_flat_remove.length) <= 0){
                        this.base_flat_remove[index] = true;
                        return this.flatReload(1,true);
                    } else {
                        this.base_flat_remove[index] = true;
                    }
                }
            } else {
                if (this.base_flat_data.data[index] && this.base_flat_data.data[index][this.base_flat_key]) {
                    let key = this.base_flat_data.data[index][this.base_flat_key];
                    /* 记录数量增加 */
                    this.base_flat_remove.length++;

                    if ((this.base_flat_data.data.length - this.base_flat_remove.length) <= 0) {
                        this.base_flat_remove[key] = true;
                        return this.flatReload(1,true);
                    } else {
                        /* 执行删除标记 */
                        this.base_flat_remove[key] = true;
                    }


                }
            }

        },

        /* 数据位置互换 */
        flatDataExchange:function(index,toIndex){
            if (index !== toIndex && this.base_flat_data.data[index] && this.base_flat_data.data[toIndex]) {
                // 交换数据位置
                [this.base_flat_data.data[index],this.base_flat_data.data[toIndex]] = [this.base_flat_data.data[toIndex],this.base_flat_data.data[index]]
            }
        },

        /* 获取某一条数据 */
        flatGetData:function (index){
            if (this.base_flat_data.data[index]) {
                // 交换数据位置
                return this.base_flat_data.data[index];
            }
        },

        /* 更新到某一条数据 */
        flatSaveData:function(index,item){
            if (this.base_flat_data.data[index] && item !== undefined) {
                return this.$set(this.base_flat_data.data,index,item);
            }
        },

        /* 向头部添加一条数据 并会从第一页重新开始 */
        flatUnshift:function(item){
            if (this.__base_flat_ref){
                // let maxCount = this.base_flat_page_size - 1;
                // let otherData = [];
                // for (let i=0,count = this.base_flat_data.data.length;i<count;i++) {
                //     if (!this.base_flat_remove[this.base_flat_data.data[i][this.base_flat_key]]) {
                //         if (otherData.length < maxCount) {
                //             otherData.push(this.base_flat_data.data[i]);
                //         } else {
                //             break;
                //         }
                //     }
                // }
                // otherData.unshift(item);
                this.__base_flat_ref.setSuccessPageApi(1);
                this.base_flat_data.data.unshift(item);
            }

        },

        /*
        *  刷新操作
        * */
        flatReload: function (state,must) {
            if (this.__base_flat_ref) {
                return this.__base_flat_ref.reload(state,must);
            }
        },
    }

}
