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

import { transformAttachments } from "./items/attachments";
import { transformRange } from "./items/range";
import { transformInput } from "./items/input";
import { transformFileUpload } from "./items/file";
import { transformSelect } from "./items/select";
import { transformLocation } from './items/location';
import { transformRadioGroup } from './items/radio';
import { transformCheckboxGroup } from './items/checkbox';
import { transformImage } from './items/image';
import { transformButton } from './items/button';
import { transformButtonList } from './items/button-list';
import { transformText, transformHeader } from "./items/text";
import { transformTimepicker } from './items/timepicker';
import { transformDatepicker } from './items/datepicker';
import { transformCard } from "./items/card";
import { transformCarousel } from './items/carousel';
import { transformSection } from './items/section';
import { transformRating } from './items/rate';
import { transformMultimedia } from './items/multimedia';
import { transformMediaPlayback } from './items/media-playback';
import { transformSignature } from './items/signature';
import { transformCreditCard } from './items/credit-card';
import { transformList } from './items/list';
import { transformScheduler } from './items/scheduler';
import { transformLink } from "./items/link";
import { transformDivider } from './items/divider';
import { transformFields } from './items/fields';
import { transformContext } from "./items/context";

export {
    transformAttachments,
    transformRange,
    transformInput,
    transformFileUpload,
    transformSelect,
    transformLocation,
    transformRadioGroup,
    transformCheckboxGroup,
    transformImage,
    transformButton,
    transformText,
    transformHeader,
    transformTimepicker,
    transformDatepicker,
    transformCard,
    transformCarousel,
    transformSection,
    transformRating,
    transformMultimedia,
    transformMediaPlayback,
    transformSignature,
    transformCreditCard,
    transformList,
    transformScheduler,
    transformLink,
    transformDivider,
    transformFields,
    transformContext
};

export const methods: {[ key: string]: Function} = {
    section: transformSection,
    input: transformInput,
    text: transformText,
    link: transformLink,
    fields: transformFields,
    context: transformContext,
    divider: transformDivider,
    header: transformHeader,
    range: transformRange,
    location: transformLocation,
    button: transformButton,
    buttonList: transformButtonList,
    attachments: transformAttachments,
    file: transformFileUpload,
    select: transformSelect,
    radio: transformRadioGroup,
    checkbox: transformCheckboxGroup,
    timePicker: transformTimepicker,
    datePicker: transformDatepicker,
    card: transformCard,
    carousel: transformCarousel,
    image: transformImage,
    rate: transformRating,
    record: transformMultimedia,
    mediaPlayback: transformMediaPlayback,
    signature: transformSignature,
    creditCard: transformCreditCard,
    list: transformList,
    scheduler: transformScheduler,
};


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

