import { getKeyValue } from '../../../../helpers/get-key-value';
import { getErrorObject } from '../../../../helpers/get-error-object'; 

import { transformSection } from './items/section';
import { transformText } from './items/text';
import { transformButton } from './items/button';
import { transformSelect } from './items/select';
import { transformImage } from './items/image';
import { transformHeader } from './items/header';
import { transformCard } from './items/card';
import { transformRadio } from './items/radio';
import { transformCheckbox } from './items/checkbox';
import { transformInput } from './items/input';
import { transformRange } from './items/range';
import { transformLocation } from './items/location';
import { transformDivider } from './items/divider';
import { transformDatepicker } from './items/date-picker';
import { transformTimepicker } from './items/time-picker';
import { transformFileUpload } from './items/file';
import { transformLink } from './items/link';
import { transformSwitch } from './items/switch';
import { transformCarousel } from './items/carousel';
import { transformButtonList } from './items/button-list';
import { transformAttachments } from './items/attachments';
import { transformFields } from './items/fields';
import { transformContext } from './items/context';

const methods: { [key: string]: Function } = {
  section: transformSection,
  text: transformText,
  header: transformHeader,
  image: transformImage,
  card: transformCard,
  button: transformButton,
  select: transformSelect,
  radio: transformRadio,
  checkbox: transformCheckbox,
  input: transformInput,
  range: transformRange,
  location: transformLocation,
  divider: transformDivider,
  datePicker: transformDatepicker,
  timePicker: transformTimepicker,
  file: transformFileUpload,
  link: transformLink,
  switch: transformSwitch,
  carousel: transformCarousel,
  buttonList: transformButtonList,
  attachments: transformAttachments,
  fields: transformFields,
  context: transformContext
};

export const getMethods = (type: string): Function => {
  return getKeyValue(methods)(type) || getErrorObject({ type, message: 'Generic to RWC' });
};

export { methods };
