import { get } from 'lodash';
import { getType, getOtherInfos } from './getAttributeInfos';

const defaultFields = ['created_by', 'updated_by', 'published_at', 'id', '_id'];

const removeFieldsFromClonedData = (
  data,
  contentTypeSchema,
  componentSchema,
  fields = defaultFields
) => {
  const recursiveCleanData = (data, schema) => {
    return Object.keys(data).reduce((acc, current) => {
      const attrType = getType(schema, current);
      const value = get(data, current);
      const component = getOtherInfos(schema, [current, 'component']);
      const isRepeatable = getOtherInfos(schema, [current, 'repeatable']);
      let timestamps = get(schema, ['options', 'timestamps']);

      if (!Array.isArray(timestamps)) {
        timestamps = [];
      }

      if ([...fields, ...timestamps].indexOf(current) !== -1) {
        delete acc[current];

        return acc;
      }

      if (!value) {
        return acc;
      }

      if (attrType === 'dynamiczone') {
        acc[current] = value.map(componentValue => {
          const subCleanedData = recursiveCleanData(
            componentValue,
            componentSchema[componentValue.__component]
          );

          return subCleanedData;
        });

        return acc;
      }

      if (attrType === 'component') {
        if (isRepeatable) {
          acc[current] = value.map(compoData => {
            const subCleanedData = recursiveCleanData(compoData, componentSchema[component]);

            return subCleanedData;
          });
        } else {
          acc[current] = recursiveCleanData(value, componentSchema[component]);
        }

        return acc;
      }

      return acc;
    }, Object.assign({}, data));
  };

  return recursiveCleanData(data, contentTypeSchema);
};

export default removeFieldsFromClonedData;
