import {
  MotionValue,
  useAnimationFrame,
  useMotionValue,
} from "framer-motion";
import React from "react";

export interface Clock {
  value: MotionValue<number>;
  setRate: (rate: number) => void;
}

export const useClock = ({ defaultValue = 0, rate = 1 } = {}): Clock => {
  const value = useMotionValue(defaultValue);
  const rateRef = React.useRef(rate);
  useAnimationFrame((_, delta) => {
    value.set(value.get() + delta * rateRef.current);
  });
  return {
    value,
    setRate: (rate: number) => {
      rateRef.current = rate;
    },
  };
};