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

/** Value of {@link BaseTextFieldContext} */
export interface BaseTextFieldContextValue {
  /** Is {@link BaseTextField} disabled */
  disabled: boolean;
}

const BaseTextFieldContext = createContext<BaseTextFieldContextValue | undefined>(undefined);

/** Provider for {@link BaseTextField} data */
export function BaseTextFieldContextProvider({
  disabled,
  children,
}: PropsWithChildren<BaseTextFieldContextValue>) {
  const value: BaseTextFieldContextValue = useMemo(
    () => ({
      disabled,
    }),
    [disabled],
  );

  return <BaseTextFieldContext.Provider value={value}>{children}</BaseTextFieldContext.Provider>;
}

/** Returns data for current {@link BaseTextField} */
export function useBaseTextFieldContext(): BaseTextFieldContextValue {
  const value = useContext(BaseTextFieldContext);
  if (!value) {
    throw new Error('useBaseTextFieldContext should be used only inside BaseTextFieldContextProvider');
  }

  return value;
}
