import { useCallback } from 'react';

export const useFormatWrapper = (
  target: HTMLTextAreaElement,
  onChange: (val: string) => void,
  prefix = '',
  suffix = ''
) => {
  return useCallback(
    event => {
      event.preventDefault();
      wrapTextInsideInput(target, prefix, suffix, onChange);
    },
    [target, onChange, prefix, suffix]
  );
};

export const wrapTextInsideInput = (
  target: HTMLTextAreaElement,
  prefix: string,
  suffix: string,
  onChange: (val: string) => void
) => {
  if (!target) return;

  const start = target.selectionStart;
  const end = target.selectionEnd;
  const selection = target.value.substring(start, end);

  const replacement = prefix + selection + suffix;

  onChange(
    target.value.substring(0, start) +
      replacement +
      target.value.substring(end, target.value.length)
  );

  target.focus();

  setTimeout(() => {
    if (start === end) {
      target.selectionEnd = end + prefix.length;
    } else {
      target.selectionEnd = end + prefix.length + suffix.length;
    }
  }, 0);
};
