import { IGenericLink } from '../../../../generic/types';
import { IRWCMessage } from '../../../types';
import { getMethods } from '../methods';
import { toHtml } from '../../../../../helpers/md-to-html';

export const transformLink = ({ props, children }: IGenericLink): IRWCMessage => {
  let message = '';
  const { url, label, title } = props;
  if (url) {
    message = `<a href="${url}" target="_blank"`;
  }
  if (title) {
    message += ` title="${title}"`;
  }
  message += `>`;

  if (label) {
    message += `${toHtml(label, true)}</a>`;
  } else if (children?.length) {
    const label = children.reduce((acc, item) => {
      if (item.type === 'button') {
        acc += `<button>${item.props?.label || item.props?.value}</button>`;
      } else {
        const transformFn = getMethods(item.type);
        if (transformFn) {
          const result = transformFn(item);
          acc += typeof result?.message === 'string' ? result.message 
            : typeof result === 'string' ? result 
            : '';
        }
      }
      return acc;
    }, '');
    message += `${label}</a>`;
  } else {
    message += `${url}</a>`;
  }

  const result: IRWCMessage = {
    message
  };

  return result;
};