import { getKeyValue } from '../../../../helpers/get-key-value';
import { getErrorObject } from '../../../../helpers/get-error-object'; 
import { 
  transformRWCText,
  transformDatepicker,
  transformTimepicker,
  transformInput,
  transformSlider,
  transformGeoLocation,
  transformFileUpload,
  transformDropdown,
  transformMenu,
  transformButtonList,
  transformCard,
  transformCarousel,
  transformCheckboxGroup,
  transformRadioGroup,
  transformMedias,
  transformMessage,
  transformRWCMedias,
  transformRating,
  transformMultimedia,
  transformAudioPlayback,
  transformVideoPlayback,
  transformSignature,
  transformCreditCard,
  transformReorderableList,
  transformScheduler
} from '.';

const methods: { [key: string]: Function } = {
  'rwc-text': transformRWCText,
  'rwc-text-input': transformInput,
  'rwc-datepicker': transformDatepicker,
  'rwc-timepicker': transformTimepicker,
  'rwc-slider': transformSlider,
  'rwc-location': transformGeoLocation,
  'rwc-attachment': transformFileUpload,
  'rwc-menu': transformMenu,
  'rwc-dropdown': transformDropdown,
  'rwc-buttons-list': transformButtonList,
  'rwc-card': transformCard,
  'rwc-carousel': transformCarousel,
  'rwc-checkbox-group': transformCheckboxGroup,
  'rwc-radio-group': transformRadioGroup,
  'rwc-medias': transformRWCMedias,
  'rwc-rate': transformRating,
  'rwc-record': transformMultimedia,
  'rwc-audio': transformAudioPlayback,
  'rwc-video': transformVideoPlayback,
  'rwc-signature': transformSignature,
  'rwc-credit': transformCreditCard,
  'rwc-reorderable-list': transformReorderableList,
  'rwc-scheduler': transformScheduler,
  'messages@message': transformMessage
};

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