class TimeUtils {
  /// 解析日志行中的时间戳，强制解析为 UTC
  static DateTime? parseLogTimestamp(String line) {
    final reg = RegExp(r'\[(\d{4}-\d{2}-\d{2}) (\d{2}:\d{2}:\d{2})\]');
    final match = reg.firstMatch(line);
    if (match == null) return null;
    try {
      final dateParts = match.group(1)!.split('-');
      final timeParts = match.group(2)!.split(':');
      return DateTime.utc(
        int.parse(dateParts[0]),
        int.parse(dateParts[1]),
        int.parse(dateParts[2]),
        int.parse(timeParts[0]),
        int.parse(timeParts[1]),
        int.parse(timeParts[2]),
      );
    } catch (_) {
      return null;
    }
  }

  /// 判断日志时间戳是否在有效窗口内
  static bool isLogTimestampValid(
    DateTime? logTime,
    DateTime? chargingStartTime,
  ) {
    if (logTime == null) return false;
    if (chargingStartTime == null) {
      final nowUtc = DateTime.now().toUtc();
      final diff = nowUtc.difference(logTime);
      return diff.abs().inMinutes <= 3;
    }
    final endTime = chargingStartTime.add(const Duration(minutes: 3));
    return logTime.isAfter(chargingStartTime) && logTime.isBefore(endTime);
  }

  /// 生成今日日志文件名（UTC）
  static String getTodayFileName() {
    final nowUtc = DateTime.now().toUtc();
    final year = nowUtc.year.toString();
    final month = nowUtc.month.toString().padLeft(2, '0');
    final day = nowUtc.day.toString().padLeft(2, '0');
    return 'mbattery_charger_log_${year}_${month}_$day';
  }
}
