import 'package:intl/intl.dart';

/// 日期时间工具类
/// 处理 UTC 时间到本地时间的转换和格式化
class DateTimeUtils {
  DateTimeUtils._();

  /// 格式化日期时间（完整格式）
  /// 自动将 UTC 时间转换为本地时间
  static String formatDateTime(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    return DateFormat('yyyy-MM-dd HH:mm').format(localTime);
  }

  /// 格式化日期时间（带秒）
  static String formatDateTimeFull(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    return DateFormat('yyyy-MM-dd HH:mm:ss').format(localTime);
  }

  /// 格式化日期（仅日期）
  static String formatDate(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    return DateFormat('yyyy-MM-dd').format(localTime);
  }

  /// 格式化短日期（月/日）
  static String formatShortDate(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    return DateFormat('MM/dd').format(localTime);
  }

  /// 从字符串解析日期并格式化短日期
  static String formatShortDateFromString(String? dateStr) {
    if (dateStr == null || dateStr.isEmpty) return '-';
    try {
      final parsed = DateTime.parse(dateStr);
      return formatShortDate(parsed);
    } catch (e) {
      return dateStr;
    }
  }

  /// 格式化时间（仅时间）
  static String formatTime(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    return DateFormat('HH:mm').format(localTime);
  }

  /// 格式化相对时间（如：刚刚、5分钟前、1小时前、昨天）
  static String formatRelativeTime(DateTime? dateTime) {
    if (dateTime == null) return '-';
    final localTime = dateTime.toLocal();
    final now = DateTime.now();
    final diff = now.difference(localTime);

    if (diff.inSeconds < 60) {
      return '刚刚';
    } else if (diff.inMinutes < 60) {
      return '${diff.inMinutes}分钟前';
    } else if (diff.inHours < 24) {
      return '${diff.inHours}小时前';
    } else if (diff.inDays < 2) {
      return '昨天 ${formatTime(dateTime)}';
    } else if (diff.inDays < 7) {
      return '${diff.inDays}天前';
    } else {
      return formatDate(dateTime);
    }
  }

  /// 判断是否是今天
  static bool isToday(DateTime? dateTime) {
    if (dateTime == null) return false;
    final localTime = dateTime.toLocal();
    final now = DateTime.now();
    return localTime.year == now.year &&
        localTime.month == now.month &&
        localTime.day == now.day;
  }

  /// 判断是否是昨天
  static bool isYesterday(DateTime? dateTime) {
    if (dateTime == null) return false;
    final localTime = dateTime.toLocal();
    final yesterday = DateTime.now().subtract(const Duration(days: 1));
    return localTime.year == yesterday.year &&
        localTime.month == yesterday.month &&
        localTime.day == yesterday.day;
  }
}
