import { IGenericCard, IGenericButton, IGenericText, IGenericHeader, IGenericImage } from '../../../../generic/types';
import { IRWCAnswerComponent } from '../../../types';
import { getAnswerComponent } from '../../../helpers/answer-types';
import { getMethods } from '../methods';

export const transformCard = ({ props, children }: IGenericCard): IRWCAnswerComponent => {
  const initCard = getAnswerComponent('rwc-card');
  Object.assign(initCard.vBind, props.rwc);
  
  return children?.reduce(
    (card, item: IGenericText|IGenericImage|IGenericButton|IGenericHeader) => {
      switch (item.type) {
        case 'image':
          card.vBind.image.push({ // get image data, not an image element
            ...item.props?.rwc,
            location: item.props?.url,
            linkUrl: item.props?.url,
          });
          break;
        case 'header':
          card.vBind.title = getMethods('header')(item, true)?.message; // get text only without h_ tags
          break;
        case 'text':
          card.vBind.description = item.props.value;
          card.vBind.text = item.props.value;
          break;
        case 'button':
          card.vBind.button = item.props.label;
          card.vBind.sendValue = item.props.value;
          card.vBind.value = item.props.value;
          break;
      }
      return card;
  }, initCard);
};