export default {
	guid: () =>
		"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g, symbol => {
			let array;

			if (symbol === "y") {
				array = ["8", "9", "a", "b"];
				return array[Math.floor(Math.random() * array.length)];
			}

			array = new Uint8Array(1);
			window.crypto.getRandomValues(array);
			return (array[0] % 16).toString(16);
		}),
	formatTime: (originalDuration: number) => {
		if (originalDuration <= 0) return "0:00";

		let duration = originalDuration;
		let hours: number | string = Math.floor(duration / (60 * 60));
		duration -= hours * 60 * 60;
		let minutes: number | string = Math.floor(duration / 60);
		duration -= minutes * 60;
		let seconds: number | string = Math.floor(duration);

		if (hours === 0) {
			hours = "";
		}

		if (hours > 0) {
			if (minutes < 10) minutes = `0${minutes}`;
		}

		if (seconds < 10) {
			seconds = `0${seconds}`;
		}

		return `${hours}${hours ? ":" : ""}${minutes}:${seconds}`;
	},
	formatTimeLong: (duration: number) => {
		if (duration <= 0) return "0 seconds";

		const hours = Math.floor(duration / (60 * 60));
		const formatHours = () => {
			if (hours > 0) {
				if (hours > 1) return `${hours} hours `;
				return `${hours} hour `;
			}
			return "";
		};

		const minutes = Math.floor((duration - hours * 60 * 60) / 60);
		const formatMinutes = () => {
			if (minutes > 0) {
				if (minutes > 1) return `${minutes} minutes `;
				return `${minutes} minute `;
			}
			return "";
		};

		const seconds = Math.floor(duration - hours * 60 * 60 - minutes * 60);
		const formatSeconds = () => {
			if (seconds > 0) {
				if (seconds > 1) return `${seconds} seconds `;
				return `${seconds} second `;
			}
			return "";
		};

		return formatHours() + formatMinutes() + formatSeconds();
	},
	getDateFormatted: (createdAt: number | Date) => {
		const date = new Date(createdAt);
		const year = date.getFullYear();
		const month = `${date.getMonth() + 1}`.padStart(2, "0");
		const day = `${date.getDate()}`.padStart(2, "0");
		const hour = `${date.getHours()}`.padStart(2, "0");
		const minute = `${date.getMinutes()}`.padStart(2, "0");
		return `${year}-${month}-${day} ${hour}:${minute}`;
	}
};
