import { IGenericWrapper } from '../../generic/types/wrapper';
import { ISlackBlockKitData } from '../types/index';

import { transformText } from './items/text-object';
import { getMethods } from './methods';

function mapBlocks(blocks: Array<any>): Array<any> {
  const res = [];
  for (let i = 0; i < blocks.length; i++) {
    const block = blocks[i];
    res.push(getMethods(block.type)(block));
  }

  return res.length > 0 ? res : [{}];
}

export function transformSlackToGeneric({
  blocks,
  attachments,
  type,
  title,
  submit,
  close
}: ISlackBlockKitData): IGenericWrapper {
  if (!type && blocks) {
    return {
      type: 'wrapper',
      children: mapBlocks(blocks),
      props: {
        slack: {
          type: 'message'
        }
      }
    };
  }

  if (attachments) {
    return {
      type: 'wrapper',
      children: attachments.map(item => mapBlocks(item.blocks)),
      props: {
        slack: {
          type: 'attachments'
        }
      }
    };
  }

  if (type === 'home') {
    return  {
      type: 'wrapper',
      children: mapBlocks(blocks),
      props: {
        slack: {
          type: 'home'
        }
      }
    }; 
  }
  
  if (type === 'modal') {
    return {
      type: 'wrapper',
      children: mapBlocks(blocks),
      props: {
        slack: {
          type: "modal",
          title: transformText(title),
          submit: transformText(submit),
          close: transformText(close)
        }
      }
    };
  }
}