import type React from 'react';
import { createContext, useContext } from 'react';

import { isNil } from 'lodash-es';

type ReadOnlyContextType = {
  isReadOnly: boolean;
};

const ReadOnlyContext = createContext<ReadOnlyContextType | undefined>(
  undefined,
);

type ReadOnlyProviderProps = {
  children: React.ReactNode;
  isReadOnly: boolean;
};

export const ReadOnlyProvider: React.FC<ReadOnlyProviderProps> = ({
  children,
  isReadOnly,
}) => {
  return (
    <ReadOnlyContext.Provider value={{ isReadOnly }}>
      {children}
    </ReadOnlyContext.Provider>
  );
};

export const useReadOnly = (): ReadOnlyContextType => {
  const context = useContext(ReadOnlyContext);
  if (isNil(context)) {
    throw new Error('useReadOnly must be used within a ReadOnlyProvider');
  }
  return context;
};
