import clsx from 'clsx';
import { createContext, PropsWithChildren, useContext } from 'react';

const Context = createContext<null | boolean>(null);
Context.displayName = 'InputGroupContext';

type Size = 'small' | 'large';

export function useInputGroupContext() {
  const context = useContext(Context);

  if (context == null) {
    throw new Error('Should be inside a InputGroup component');
  }
}

interface Props {
  size?: Size;
  className?: string;
}

export function InputGroup({
  children,
  size,
  className,
}: PropsWithChildren<Props>) {
  return (
    <Context.Provider value>
      <div className={clsx('input-group', sizeClass(size), className)}>
        {children}
      </div>
    </Context.Provider>
  );
}

function sizeClass(size?: Size) {
  switch (size) {
    case 'large':
      return 'input-group-lg';
    case 'small':
      return 'input-group-sm';
    default:
      return '';
  }
}