import dayjs from 'dayjs'
import relativeTime from 'dayjs/plugin/relativeTime'
import 'dayjs/locale/zh-cn'
dayjs.locale('zh-cn') // 设置为中文
// 使用相对时间插件
dayjs.extend(relativeTime)
export function RelativeTime(time: number) {
  return dayjs(time * 1000).fromNow()
}

export function showDay(time: number) {
  return dayjs(time).format('YYYY-MM-DD')
}

export function getDay(num?: number) {
  if (num) {
    const yesterday = dayjs().subtract(num, 'day')
    console.log(yesterday.format('YYYY-MM-DD'))
    return yesterday.format('YYYY-MM-DD')
  }
  return dayjs().format('YYYY-MM-DD')
}

export function getOverDay(num: number, type: string) {
  const currentDate = dayjs()
  const formattedCurrentDate = currentDate.format('YYYY-MM-DD')
  console.log('当前日期:', formattedCurrentDate)
  if (type === 'day') {
    //获取过去num天的日期
    const pastFifteenDays = dayjs().subtract(num, 'day')
    const formattedPastFifteenDays = pastFifteenDays.format('YYYY-MM-DD')
    return [formattedPastFifteenDays, formattedCurrentDate]
  }
  if (type === 'month') {
    // 获取过去num个月的日期
    const pastTwelveMonths = dayjs().subtract(num, 'month')
    const formattedPastTwelveMonths = pastTwelveMonths.format('YYYY-MM-DD')
    return [formattedPastTwelveMonths, formattedCurrentDate]
  }
}

export function getTheFutureDay(num = 1) {
  //获取未来num天的日期
  const pastFifteenDays = dayjs().add(num, 'day')
  return pastFifteenDays.format('YYYY-MM-DD')
}

export function getThreeMonthsLater(num = 3, dateString: string) {
  const date = dayjs(dateString)
  const threeMonthsLater = date.add(num || 3, 'month')
  return threeMonthsLater.format('YYYY-MM-DD')
}

export function getCurrentHour() {
  const now = new Date()
  const currentHour = now.getHours()
  const currentMinute = now.getMinutes()
  console.log(currentHour, currentMinute, 'dayjs().hour()')
  return { currentHour, currentMinute }
  // return dayjs().hour()
}

export function generateTimeSlots(externalDate = null) {
  // 如果没有外部传入日期，使用当前日期
  const baseDate = externalDate ? dayjs(externalDate) : dayjs()
  const now = externalDate ? dayjs(externalDate) : dayjs() // 使用相同的日期作为当前时间
  const startHour = 8 // 开始时间 8:00
  const endHour = 18 // 结束时间 18:00
  const interval = 2 // 间隔2小时
  const currentTime = now.valueOf() // 当前时间的时间戳
  const slots = []
  let currentStart = startHour
  // 生成所有时间段
  while (currentStart < endHour) {
    const currentEnd = Math.min(currentStart + interval, endHour)
    // 使用基准日期设置具体时间
    const startTime = baseDate.hour(currentStart).minute(0).second(0)
    const endTime = baseDate.hour(currentEnd).minute(0).second(0)

    const startStr = startTime.format('HH:mm')
    const endStr = endTime.format('HH:mm')

    // 检查当前时间是否在这个时间段内
    const isCurrentPeriod = currentTime >= startTime.valueOf() && currentTime < endTime.valueOf()

    // 只有当时间段还未结束时才显示
    if (endTime.valueOf() > currentTime) {
      slots.push({
        label: isCurrentPeriod ? '两个小时内' : `${startStr}-${endStr}`,
        str: startStr,
        end: endStr,
        isCurrent: isCurrentPeriod,
        date: baseDate.format('YYYY-MM-DD'),
        startTimestamp: startTime.valueOf(),
        endTimestamp: endTime.valueOf()
      })
    }

    currentStart = currentEnd
  }
  console.log('slots', slots)
  return slots
}

export function isSameDay(day: string) {
  //是否是当天-还款日期
  const date1 = new Date(day)
  const date2 = new Date()
  return (
    date1.getFullYear() === date2.getFullYear() &&
    date1.getMonth() === date2.getMonth() &&
    date1.getDate() === date2.getDate()
  )
}

export function getTimeRangeDisplay(startTime: string, endTime: string, currentTime = null) {
  try {
    const start = dayjs(startTime)
    const end = dayjs(endTime)
    const now = currentTime ? dayjs(currentTime) : dayjs()

    if (!start.isValid() || !end.isValid()) {
      return ''
    }

    if (start.isAfter(end)) {
      return '时间顺序错误'
    }

    // 检查当前时间是否在时间段内
    if (now.isAfter(start) && now.isBefore(end)) {
      return '两个小时内'
    }

    // 不在时间段内，显示具体时间
    const isSameDay = start.isSame(end, 'day')

    if (isSameDay) {
      return `${start.format('YYYY-MM-DD')} ${start.format('HH:mm')}-${end.format('HH:mm')}`
    } else {
      return `${start.format('YYYY-MM-DD HH:mm')} - ${end.format('YYYY-MM-DD HH:mm')}`
    }
  } catch (error) {
    return '时间格式错误'
  }
}

export function currentYear() {
  //获取当前年份
  const currentYear = new Date().getFullYear()
  console.log('当前年份:', currentYear)
  return currentYear + ''
}

export function getFromNow(time: string) {
  //获取时间距离现在的时间
  return time ? dayjs(time).fromNow() : '' // 22 年前
}

export function getIsInRangeInclusive(start?: string, end?: string) {
  const now = dayjs()
  // 创建日期段的起始和结束时间的dayjs对象
  const startDate = dayjs(start)
  const endDate = dayjs(end)
  return now.isAfter(startDate) && now.isBefore(endDate)
}

export function getDate(time: string) {
  //时间转换为YYYY-MM-DD格式
  return time ? dayjs(time).format('YYYY-MM-DD') : ''
}

export function specificTime(targetTime: string) {
  const now = dayjs()
  const target = dayjs(targetTime)
  let hoursDiff = Math.abs(target.diff(now, 'hour', true)) <= 2 || target.isBefore(now)
  console.log(hoursDiff, 'hoursDiff')
  //是否在2小时内的
  return hoursDiff
}

export function showCurrentTime() {
  const timeString = dayjs().format('HH:mm:ss')
  return timeString
}

export function checkWorkStatus() {
  const now = dayjs()
  const currentHour = now.hour()
  // 上班时间: 8点-18点
  if (currentHour >= 8 && currentHour < 18) {
    return { status: '在线', value: 'Online' }
  } else {
    return { status: '已休息', value: 'Offline' }
  }
}