import isPlainObject from 'lodash/isPlainObject';
import cloneDeep from 'lodash/cloneDeep';

// Подготовка параметров для печатной формы.
// т.к. Mustache не дает проверить пустой массив или нет
// для каждого массива формируется доп поле `${arrayVariable}+_has_items`
// также, если нужно выводить индексы элемента формируется доп массив `${arrayVariable}+_with_index`
// где , если это массив объектов, то просто каждому объекту присваивается поле index,
// иначе каждый элемент массива становится объектом , с index и value
export default function preparePrintData(data: any) {
  if (isPlainObject(data)) {
    const checkedParams: any = {};
    Object.entries(data).forEach(([key, value]: [string, any]) => {
      if (Array.isArray(value)) {
        checkedParams[key + '_has_items'] = Boolean(value.length);
        checkedParams[key + '_with_index'] = value.map((el: any, i: number) => {
          const copy = cloneDeep(el);
          if (isPlainObject(copy)) {
            copy.index = i + 1;
          }
          return preparePrintData(copy);
        });
      }
      if (isPlainObject(value)) {
        checkedParams[key] = preparePrintData(value);
      }
    });
    return {
      ...data,
      ...checkedParams,
    };
  }
  return {};
}
