import { getKeyValue } from '../../../helpers/get-key-value';
import { getErrorObject } from '../../../helpers/get-error-object'; 
// Block
import { transformSection } from './items/section';
import { transformActions } from './items/actions';
import { transformContext } from './items/context';
import { transformHeader } from './items/header';
import { transformInput } from './items/input';

// Elements
import { transformButton } from './items/button';
import { transformImage } from './items/image';
import { transformDatePicker } from './items/date-picker';
import { transformDivider } from './items/divider';
import { transformCheckboxes } from './items/checkboxes';
import { transformRadioButtons } from './items/radio-buttons';
import { transformPlainTextInput } from './items/plain-text-input';
import { transformTimePicker } from './items/time-picker';

// Composition fields
import { transformText } from './items/text-object';

// Select
import { transformChannelsSelect } from './items/select/channels-select';
import { transformOverflow } from './items/select/overflow';
import { transformConversationsSelect } from './items/select/conversations-select';
import { transformMultiConversationsSelect } from './items/select/multi-conversations-select';
import { transformUsersSelect } from './items/select/users-select';
import { transformSelect } from './items/select/select';
import { transformMultiUsersSelect } from './items/select/multi-users-select';
import { transformMultiStaticSelect } from './items/select/multi-static-select';

const methods: {[key:string]: Function} = {
  section: transformSection,
  users_select: transformUsersSelect,
  static_select: transformSelect,
  conversations_select: transformConversationsSelect,
  multi_conversations_select: transformMultiConversationsSelect,
  button: transformButton,
  image: transformImage,
  overflow: transformOverflow,
  datepicker: transformDatePicker,
  actions: transformActions,
  channels_select: transformChannelsSelect,
  divider: transformDivider,
  context: transformContext,
  plain_text: transformText,
  mrkdwn: transformText,
  header: transformHeader,
  checkboxes: transformCheckboxes,
  radio_buttons: transformRadioButtons,
  input: transformInput,
  plain_text_input: transformPlainTextInput,
  multi_users_select: transformMultiUsersSelect,
  multi_static_select: transformMultiStaticSelect,
  timepicker: transformTimePicker
};

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

export { methods };
  
export const methodsSlackToGenrric = methods;


