import { useMemo, useRef } from 'react';

export default function useComplainingMemo<T>(fn: () => T, deps: any[]): T {
  const indexRef = useRef(0);
  const lastDeps = useRef(deps);
  const result = useMemo(() => {
    indexRef.current++;
    console.log(`UCM RERENDER ${indexRef.current} ####################`);
    if (lastDeps.current !== deps) {
      deps.forEach((dep, index) => {
        if (dep !== lastDeps.current[index]) {
          console.log(
            `UCM CHANGE ${index}`,
            `${dep}`.replace(/\n/g, ' / ').replace(/\s+/g, ' ').slice(0, 25),
            `${lastDeps.current[index]}`
              .replace(/\n/g, ' / ')
              .replace(/\s+/g, ' ')
              .slice(0, 25)
          );
        }
      });
      lastDeps.current = deps;
    }
    return fn();
  }, deps);
  return result;
}
