import { IGenericLink } from '../../../generic/types';
import { ISlackTextObject } from '../../types';
import { getMethods } from '../methods';

export const transformLink = ({ props, children }: IGenericLink): ISlackTextObject => {
  let result = '';
  const { url, label } = props;

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

  return {
    type: 'mrkdwn',
    text: result
  };
};