import { delay, TimeDelay, TimeWait, wait } from './delay';
import { elapsed, timer, ITimer, TimerUnit } from './timer';
import { fromTimestamp, toTimestamp } from './util';
import { moment } from '../../libs';

export { delay, wait, timer, ITimer, TimerUnit, TimeDelay, TimeWait };

export type ITime = {
  delay: TimeDelay;
  wait: TimeWait;
  timer: (start?: Date) => ITimer;
  toTimestamp: (date?: Date) => number;
  fromTimestamp: (timestamp: number) => Date;
};

export const time: ITime & { elapsed: (from: Date) => moment.Duration } = {
  delay,
  wait,
  timer,
  elapsed,
  toTimestamp,
  fromTimestamp,
};
