const weekdays = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];

// 格式化日期为 YYYY-MM-DD
export function formatToMonthDay(date) {
	const month = String(date.getMonth() + 1).padStart(2, '0')
	const day = String(date.getDate()).padStart(2, '0')
	return `${month}月${day}日`
}

/**
 * 根据传入时间获取星期几
 * @param {Date} date
 */
export function getWeekday(date) {
	return weekdays[date.getDay()]
}
/**
 * 判断两个时间是否是同一天
 * @param {Object} date1
 * @param {Object} date2
 */
export function isSameDay(date1, date2) {
  // 检查两个日期是否为同一天
  return date1.getFullYear() === date2.getFullYear() &&
         date1.getMonth() === date2.getMonth() &&
         date1.getDate() === date2.getDate()
}
// 格式化日期为 YYYY-MM-DD
const formatDate = (date) => {
	const year = date.getFullYear()
	const month = String(date.getMonth() + 1).padStart(2, '0')
	const day = String(date.getDate()).padStart(2, '0')
	return `${year}-${month}-${day}`
}

/**
 * 根据传入时间, 获取传入时间的本周的起止日期(结束日期为昨天)
 * @param {Date} inputDate 传入的时间
 */
export function getCurrentWeekDates(inputDate) {
  const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
  
  // 计算到本周一的日期差
  // 如果今天是周一(1)，则 diffToMonday = 0
  // 如果今天是周日(0)，则 diffToMonday = 6
  const diffToMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1
  
  // 获取本周一（本周的第一天）
  const monday = new Date(inputDate)
  monday.setDate(inputDate.getDate() - diffToMonday)
  
  // 获取昨天的日期
  const yesterday = new Date(inputDate)
  // yesterday.setDate(inputDate.getDate() - 1)
  
  return {
    start: formatDate(monday),
    end: formatDate(yesterday)
  }
}

/**
 * 根据传入时间, 获取传入时间的上一周的起止日期
 * @param {Date} inputDate 传入的时间
 */
export function getLastWeekDates(inputDate) {
  const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
  // 计算到上周一的日期差
  // 如果今天是周一(1)，则diffToLastWeek = 1 + 7 = 8（回到上周一）
  // 如果今天是周日(0)，则diffToLastWeek = 0 + 7 + 1 = 8（回到上周一）
  const diffToLastWeek = dayOfWeek === 0 ? 7 : dayOfWeek - 1 + 7
  
  // 获取上周一（上周的第一天）
  const lastMonday = new Date(inputDate)
  lastMonday.setDate(inputDate.getDate() - diffToLastWeek)
  
  // 获取上周日（上周的最后一天）
  const lastSunday = new Date(lastMonday)
  lastSunday.setDate(lastMonday.getDate() + 6)
  
  return {
    start: formatDate(lastMonday),
    end: formatDate(lastSunday)
  }
}

/**
 * 根据传入时间, 获取传入时间的下一周的起止日期, 结束日期不能超过今天, 如果超过今天, 则结束日期是今天
 * @param {Date} inputDate 传入的时间
 */
export function getNextWeekDates(inputDate) {
  const dayOfWeek = inputDate.getDay() // 0 (周日) 到 6 (周六)
  
  // 计算到下周一的日期差
  // 如果今天是周一(1)，则 diffToNextMonday = 7
  // 如果今天是周日(0)，则 diffToNextMonday = 1
  const diffToNextMonday = dayOfWeek === 0 ? 1 : 7 - dayOfWeek + 1
  
  // 获取下周一（下一周的第一天）
  const nextMonday = new Date(inputDate)
  nextMonday.setDate(inputDate.getDate() + diffToNextMonday)
  
  // 获取下一周的结束日期（下周一加6天）
  const nextSunday = new Date(nextMonday)
  nextSunday.setDate(nextMonday.getDate() + 6)
  
  // 确保结束日期不超过今天
  const today = new Date()
  today.setHours(0, 0, 0, 0) // 设置为今天的午夜，以便比较
  
  if (nextSunday > today) {
    nextSunday.setTime(today.getTime()) // 如果超过今天，则设置为今天
  }
  
  return {
    start: formatDate(nextMonday),
    end: formatDate(nextSunday)
  }
}

/**
 * 根据传入时间, 获取传入时间的当月的起止日期(结束时间为当前日期)
 * @param {Date} inputDate 传入的时间
 */
export function getMonthlyDates(inputDate) {
  // 获取传入日期所在月份的第一天
  const firstDayOfMonth = new Date(inputDate.getFullYear(), inputDate.getMonth(), 1)
  
  // 获取昨天的日期
  const yesterday = new Date(inputDate)
  // yesterday.setDate(inputDate.getDate() - 1)
  
  return {
    start: formatDate(firstDayOfMonth),
    end: formatDate(yesterday)
  }
}

/**
 * 根据传入时间, 获取当前时间的上月的起止日期
 * @param {Date} inputDate 传入的时间
 */
export function getLastMonthDates(inputDate) {
  // 获取传入日期所在月份的第一天
  const firstDayOfCurrentMonth = new Date(inputDate.getFullYear(), inputDate.getMonth(), 1)
  
  // 获取上个月的最后一天
  const lastDayOfLastMonth = new Date(firstDayOfCurrentMonth - 1)
  
  // 获取上个月的第一天
  const firstDayOfLastMonth = new Date(lastDayOfLastMonth.getFullYear(), lastDayOfLastMonth.getMonth(), 1)
  
  return {
    start: formatDate(firstDayOfLastMonth),
    end: formatDate(lastDayOfLastMonth)
  }
}

/**
 * 根据传入时间, 获取传入时间的下一月的起止日期, 结束日期不能超过今天, 如果超过今天, 则结束日期是今天
 * @param {Date} inputDate 传入的时间
 */
export function getNextMonthDates(inputDate) {
  // 获取下一月的第一天
  const nextMonthFirstDay = new Date(inputDate.getFullYear(), inputDate.getMonth() + 1, 1)
  // 获取下一月的最后一天
  const nextMonthLastDay = new Date(nextMonthFirstDay.getFullYear(), nextMonthFirstDay.getMonth() + 1, 0)
  // 确保结束日期不超过今天
  const today = new Date()
  today.setHours(0, 0, 0, 0) // 设置为今天的午夜，以便比较
  if (nextMonthLastDay > today) {
    nextMonthLastDay.setTime(today.getTime()) // 如果超过今天，则设置为今天
  }
  return {
    start: formatDate(nextMonthFirstDay),
    end: formatDate(nextMonthLastDay)
  }
}