/*
 *  表格列设置
 *
 * @Author:    1024创新实验室-主任：卓大
 * @Date:      2022-08-26 23:45:51
 * @Wechat:    zhuda1024
 * @Email:     lab1024@163.com
 * @Copyright  1024创新实验室 （ https://1024lab.net ），Since 2012
 */

import _ from 'lodash';

/**
 * 将原视表格列和用户表格列进行合并、排序
 * @param {*} originalTableColumnArray
 * @param {*} userTableColumnArray
 */
export function mergeColumn(originalTableColumnArray, userTableColumnArray) {
  let saveFlag = false;
  if (!userTableColumnArray) {
    return originalTableColumnArray;
  }

  //第一步：将用户的列数据转为Map，以后备使用
  let userTableColumnMap = new Map();
  for (const item of userTableColumnArray) {
    userTableColumnMap.set(item.columnKey, item);
  }

  //第二步：以前端的table columns列为基础，将用户后端的数据填充到前端表格列里
  let fontColumnSort = 1;
  let newColumns = [];
  for (const fontColumn of originalTableColumnArray) {
    //原始表格列默认显示
    fontColumn.columnKey = fontColumn.dataIndex;
    fontColumn.showFlag = true;
    fontColumn.sort = fontColumnSort;

    // 如果用户存在此列，则覆盖 sort和width、showFlag字段
    let userColumn = userTableColumnMap.get(fontColumn.columnKey);
    if (userColumn) {
      fontColumn.sort = userColumn.sort;
      fontColumn.showFlag = userColumn.showFlag;
      if (fontColumn.dragAndDropFlag) {
        saveFlag = true;
        delete fontColumn.dragAndDropFlag;
      } else {
        if (userColumn.width) {
          fontColumn.width = userColumn.width;
        }
      }
    }
    newColumns.push(fontColumn);
    fontColumnSort++;
  }

  //第三步：前端列进行排序
  newColumns = _.sortBy(newColumns, (e) => e.sort);
  return {
    newColumns,
    saveFlag,
  };
}
