import { cloneElement, useMemo } from 'react';

const compareCase = (value, caseValue) => {
  if (Array.isArray(caseValue)) {
    return caseValue.includes(value);
  } else {
    return value === caseValue;
  }
};

export const Oneof = ({ value, children, className }) => {
  const selectedChild = useMemo(() => {
    if (Array.isArray(children)) {
      return children.find(c => compareCase(value, c.props.case)) || null;
    } else if (compareCase(value, children.props.case)) {
      return children;
    }
  }, [children, value]);

  return selectedChild ? cloneElement(selectedChild, {
    ...selectedChild.props,
    className: [className, selectedChild.props.className].join(" "),
  }) : null;
};