import { useEffect, useState } from '@wordpress/element';

let serverOffsetMilliseconds = 0;

export function syncClock( serverTime: string ): void {
	const serverTimestamp = Date.parse( serverTime );

	if ( ! Number.isNaN( serverTimestamp ) ) {
		serverOffsetMilliseconds = serverTimestamp - Date.now();
	}
}

function serverNow(): number {
	return Date.now() + serverOffsetMilliseconds;
}

export function useNow( refreshMilliseconds: number ): number {
	const [ now, setNow ] = useState( serverNow );

	useEffect( () => {
		const timer = window.setInterval( () => {
			setNow( serverNow() );
		}, refreshMilliseconds );

		return () => {
			window.clearInterval( timer );
		};
	}, [ refreshMilliseconds ] );

	return now;
}
