import { omit } from 'lodash';
import { addAction } from '@wordpress/hooks';
import { registerModule } from '@divi/module-library';
import * as fieldLibrary from '@divi/field-library';

import { category } from './components/category';
import { file } from './components/file';
import { search } from './components/search';
import { WpfdCategoryPickerField } from './fields/wpfd-category-picker';
import { WpfdFilePickerField } from './fields/wpfd-file-picker';

const registerFieldComponent = (fieldLibrary as any).registerFieldComponent as ((params: {
  name: string;
  component: any;
}) => void) | undefined;

if (registerFieldComponent) {
  registerFieldComponent({
    name: 'wpfd/category-picker',
    component: WpfdCategoryPickerField,
  });

  registerFieldComponent({
    name: 'wpfd/file-picker',
    component: WpfdFilePickerField,
  });
}

addAction('divi.moduleLibrary.registerModuleLibraryStore.after', 'wpfd', () => {
  registerModule(category.metadata, omit(category, 'metadata'));
  registerModule(file.metadata, omit(file, 'metadata'));
  registerModule(search.metadata, omit(search, 'metadata'));
});
