import { IGenericCheckbox } from '../../../generic/types';
import { ISlackCheckboxes, ISlackInput, ISlackTextObject } from '../../types';
import {
  convertGenericOptions
} from '../helpers/convert-options';
import { transformTextObject } from './text';
import { transformConfirm } from './confirm';
import { getElementWithSectionWrapper } from '../helpers/section-wrapper';

export const transformCheckbox = ({ 
  props
}: IGenericCheckbox): ISlackCheckboxes|ISlackInput  => {
  const element: ISlackCheckboxes = {
    type: 'checkboxes',
    action_id: props.slack?.action_id || props.variableName || props.web?.variableName,
    options: convertGenericOptions(props.options)
  };

  if (props.slack?.confirm) {
    element.confirm = transformConfirm(props.slack?.confirm);
  }

  if (props.value) {
    const selected = props.options.filter(op => props.value[op.name] === true);
    const initial_options = convertGenericOptions(selected);
    if (initial_options?.length) {
      element.initial_options = initial_options;
    }
  }

  if (props.label) {
    const label: ISlackTextObject = transformTextObject({
      value: props.label,
      type: 'plain'
    });

    const dispatch_action = props.web?.interactive;

    return getElementWithSectionWrapper(element, label, dispatch_action);
  }

  return element;
};