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 { transformDatePicker } from './items/date-picker';
import { transformDivider } from './items/divider';
import { transformInput } from './items/input'; 
import { transformPlainTextInput } from './items/plain-text-input';
import { transformCheckbox } from './items/checkbox';
import { transformRadioButtons } from './items/radio'; 
import { transformTimePicker } from './items/time-picker';
import { transformContext } from './items/context';
import { transformHeader } from './items/header';
import { transformFields } from './items/fields';
import { transformLink } from './items/link';

const methods: {[key:string]: Function}= {
  section: transformSection,
  text: transformText,
  button: transformButton,
  select: transformSelect,
  static_select: transformSelect,
  image: transformImage,
  datePicker: transformDatePicker,
  divider: transformDivider,
  inputWrapper: transformInput,
  input: transformPlainTextInput,
  plain_text_input: transformPlainTextInput,
  checkbox: transformCheckbox,
  radio: transformRadioButtons,
  timePicker: transformTimePicker,
  context: transformContext,
  header: transformHeader,
  fields: transformFields,
  link: transformLink
};

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

export { methods };
  
export const methodsGenrricToSlack = methods;

