import { Time } from 'container/TopNav/DateTimeSelection/config';
import { GlobalReducer } from 'types/reducer/globalTime';

import getMinAgo from './getStartAndEndTime/getMinAgo';

const GetMinMax = (
	interval: Time,
	dateTimeRange?: [number, number],
): GetMinMaxPayload => {
	let maxTime = new Date().getTime();
	let minTime = 0;

	if (interval === '1min') {
		const minTimeAgo = getMinAgo({ minutes: 1 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '10min') {
		const minTimeAgo = getMinAgo({ minutes: 10 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '15min') {
		const minTimeAgo = getMinAgo({ minutes: 15 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '1hr') {
		const minTimeAgo = getMinAgo({ minutes: 60 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '30min') {
		const minTimeAgo = getMinAgo({ minutes: 30 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '5min') {
		const minTimeAgo = getMinAgo({ minutes: 5 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '1day') {
		// one day = 24*60(min)
		const minTimeAgo = getMinAgo({ minutes: 24 * 60 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === '1week') {
		// one week = one day * 7
		const minTimeAgo = getMinAgo({ minutes: 24 * 60 * 7 }).getTime();
		minTime = minTimeAgo;
	} else if (['4hr', '6hr'].includes(interval)) {
		const h = parseInt(interval.replace('hr', ''), 10);
		const minTimeAgo = getMinAgo({ minutes: h * 60 }).getTime();
		minTime = minTimeAgo;
	} else if (interval === 'custom') {
		maxTime = (dateTimeRange || [])[1] || 0;
		minTime = (dateTimeRange || [])[0] || 0;
	} else {
		throw new Error('invalid time type');
	}

	return {
		minTime: minTime * 1000000,
		maxTime: maxTime * 1000000,
	};
};

interface GetMinMaxPayload {
	minTime: GlobalReducer['minTime'];
	maxTime: GlobalReducer['maxTime'];
}

export default GetMinMax;
