// eslint-disable-next-line no-console
const originError = console.error;

export function isSafeWarning(message: boolean, all = false) {
  const list = ['useLayoutEffect does nothing on the server'];

  if (all) {
    list.push('is deprecated in StrictMode');
  }

  return list.some((msg) => String(message).includes(msg));
}

/** This function will remove `useLayoutEffect` server side warning. Since it's useless. */
export function excludeWarning() {
  const errorSpy = jest.spyOn(console, 'error').mockImplementation((msg, ...rest) => {
    if (isSafeWarning(msg)) {
      return;
    }
    originError(msg, ...rest);
  });

  return errorSpy;
}

export default function excludeAllWarning() {
  let cleanUp: Function;

  beforeAll(() => {
    cleanUp = excludeWarning().mockRestore;
  });

  afterAll(() => {
    cleanUp();
  });
}