// 判断传入时间是否是今天
export const isToday = (date) => {
	const today = new Date();
	const startOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate());
	const endOfDay = new Date(today.getFullYear(), today.getMonth(), today.getDate() + 1, 0, 0, 0, -1);
	return new Date(date) >= startOfDay &&  new Date(date) <= endOfDay;
};

// 判断传入的时间间隔是否小于30分
export function isWithinThirtyMinutes(time1, time2) {
	// 定义一个辅助函数来解析时间字符串为 Date 对象  
	function parseTime(timeStr) {
		const [dateStr, timeStrPart] = timeStr.split(' ');
		const [year, month, day] = dateStr.split('-').map(Number);
		const [hours, minutes] = timeStrPart.split(':').map(Number);
		return new Date(year, month - 1, day, hours, minutes); // 注意月份是从0开始的  
	}

	// 解析输入的时间字符串  
	const date1 = parseTime(time1);
	const date2 = parseTime(time2);

	// 计算时间差（毫秒）  
	const timeDifference = Math.abs(date2.getTime() - date1.getTime());


	// 将时间差转换为分钟并检查是否小于三小时 
	return timeDifference <= (180 * 60 * 1000); // 30分钟 * 60秒/分钟 * 1000毫秒/秒  
};
export function isWithin48Hours(time1, time2) {  
	function parseTime(timeStr) {
		const [dateStr, timeStrPart] = timeStr.split(' ');
		const [year, month, day] = dateStr.split('-').map(Number);
		const [hours, minutes] = timeStrPart.split(':').map(Number);
		return new Date(year, month - 1, day, hours, minutes); // 注意月份是从0开始的  
	}
    const date1 = parseTime(time1);  
    const date2 = parseTime(time2);  
      
    // 计算时间差（毫秒）  
    const timeDifference = Math.abs(date2.getTime() - date1.getTime());

      
    // 将时间差转换为小时  
    const hoursDifference = timeDifference / (1000 * 60 * 60);  
      
    // 检查是否小于或等于48小时  
    return hoursDifference <= 48;  
} 


// 获取指定时间之前的时间戳
export function getTimeStamp(type) {
	const now = new Date();
	let timestamp;

	switch (type) {
		case 0:
			// 获取当前时间的时间戳  
			timestamp = Math.floor(now.getTime() );
			break;
		case 1:
			// 获取180分钟之前的时间戳  
			now.setMinutes(now.getMinutes() - 180);
			timestamp = Math.floor(now.getTime());
			break;
		case 2:
			// 获取24小时之前的整点时间戳  
			now.setHours(now.getHours() - 24, 0, 0, 0);
			timestamp = Math.floor(now.getTime());
			break;
		case 3:
			// 获取48小时之前的整点时间戳  
			now.setHours(now.getHours() - 48, 0, 0, 0);
			timestamp = Math.floor(now.getTime() );
			break;
		case 4:
			// 获取现在的整点时间戳  
			now.setMinutes(0, 0, 0);
			timestamp = Math.floor(now.getTime());
			break;
		case 5:
			// 获取30天之前的整点时间戳  
			now.setDate(now.getDate() -29);
			timestamp = Math.floor(now.getTime());
			break;
		default:
			throw new Error('Invalid type');
	}

	return timestamp;
}

// 获取传入时间秒的时间戳
export function getStamp(time) {
	const date = new Date(time);
	return Math.floor(date.getTime() / 1000);
}
// 判断传入时间是否超过当前时间
export function isDateFuture(inputDate) {  
    // 将输入的日期字符串转换为 Date 对象  
    const dateToCheck = new Date(inputDate);  
  
    // 获取当前时间  
    const now = new Date();  
  
    // 比较两个日期对象  
    return dateToCheck > now;  
}  

// 判断两个日期是否在给定天数内  
export function isDateRangeWithinDays(startDate, endDate, maxDays) {  
    // 将输入的日期字符串转换为 Date 对象  
    const start = new Date(startDate);  
    const end = new Date(endDate);  
  
    // 检查日期是否有效  
    if (isNaN(start.getTime()) || isNaN(end.getTime())) {  
        throw new Error("无效的日期格式");  
    }  
  
    // 计算两个日期之间的时间差（毫秒）  
    const timeDifference = end - start;  
  
    // 将时间差转换为天数  
    const dayDifference = timeDifference / (1000 * 60 * 60 * 24);  
  
    // 判断天数差是否大于给定的天数限制  
    return dayDifference <= maxDays;  
}  

// 判断基地
export function groupByType(arr) {  
    const result = [];  
    const typeMap = {};  
  
    // 遍历输入数组  
    arr.forEach(item => {  
        const { as_base, as_code } = item;  
  
        // 如果typeMap中还没有这个type，则初始化一个新的对象  
        if (!typeMap[as_base]) {  
            typeMap[as_base] = {  
                value: as_base,
				label: as_base,  
                children: []  
            };  
        }  
  
        // 将id添加到对应type的children数组中  
        typeMap[as_base].children.push(as_code);  
    });  
  
    // 将typeMap中的对象添加到结果数组中  
    for (const key in typeMap) {  
        if (typeMap.hasOwnProperty(key)) {  
            result.push(typeMap[key]);  
        }  
    }  
  
    return result;  
}  

// 获取传入日期的第二天的0点
export function getNextDayMidnight(date) {
	const nextDay = new Date(date);
	nextDay.setDate(nextDay.getDate() + 1);
	nextDay.setHours(0, 0, 0, 0);
	return nextDay;
  }
