/**
 * 时区工具函数
 */

/**
 * 获取当前设置的时区
 */
export function getCurrentTimezone(): string {
  return localStorage.getItem('timezone') || 'Asia/Shanghai'
}

/**
 * 格式化时间到指定时区
 * @param date 日期对象或日期字符串
 * @param timezone 时区，默认使用用户设置的时区
 * @param options 格式化选项
 */
export function formatDateTimeInTimezone(
  date: Date | string | null | undefined,
  timezone?: string,
  options: Intl.DateTimeFormatOptions = {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  }
): string {
  if (!date) return '—'
  
  try {
    const dateObj = typeof date === 'string' ? new Date(date) : date
    const targetTimezone = timezone || getCurrentTimezone()
    
    return new Intl.DateTimeFormat('zh-CN', {
      ...options,
      timeZone: targetTimezone
    }).format(dateObj)
  } catch (error) {
    console.error('Error formatting date:', error)
    return typeof date === 'string' ? date : date?.toString() || '—'
  }
}

/**
 * 格式化日期到指定时区（只显示日期）
 * @param date 日期对象或日期字符串
 * @param timezone 时区，默认使用用户设置的时区
 */
export function formatDateInTimezone(
  date: Date | string | null | undefined,
  timezone?: string
): string {
  return formatDateTimeInTimezone(date, timezone, {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit'
  })
}

/**
 * 格式化时间到指定时区（只显示时间）
 * @param date 日期对象或日期字符串
 * @param timezone 时区，默认使用用户设置的时区
 */
export function formatTimeInTimezone(
  date: Date | string | null | undefined,
  timezone?: string
): string {
  return formatDateTimeInTimezone(date, timezone, {
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  })
}

/**
 * 获取时区偏移信息
 * @param timezone 时区
 */
export function getTimezoneOffset(timezone: string): string {
  try {
    const now = new Date()
    const utc = new Date(now.getTime() + now.getTimezoneOffset() * 60000)
    const targetTime = new Date(utc.toLocaleString('en-US', { timeZone: timezone }))
    const offset = (targetTime.getTime() - utc.getTime()) / 3600000
    
    const sign = offset >= 0 ? '+' : '-'
    const hours = Math.abs(Math.floor(offset))
    const minutes = Math.abs((offset % 1) * 60)
    
    return `UTC${sign}${hours.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}`
  } catch (error) {
    return 'UTC+00:00'
  }
}
