import 'package:dart_jsonwebtoken/dart_jsonwebtoken.dart';

/// JWT token 过期时间解析
///
/// 使用 dart_jsonwebtoken 解码 JWT payload，提取 `exp` claim 返回过期时间。
/// 返回 null 表示无法解析（非 JWT 格式或缺少 exp 字段）。
///
/// 只读取 payload，不验证签名（验证是服务端的事）。
///
/// 用于 [ApiConfig.onGetTokenExpiry] 回调，启用 token 主动刷新：
/// 距过期不足阈值时提前刷新，避免带过期 token 发请求或重连。
///
/// ```dart
/// final expiry = parseJwtExpiry('eyJhbGci...');
/// if (expiry != null) {
///   final remaining = expiry.difference(DateTime.now());
///   print('Token expires in ${remaining.inMinutes} min');
/// }
/// ```
DateTime? parseJwtExpiry(String token) {
  try {
    final jwt = JWT.decode(token);
    final payload = jwt.payload;
    if (payload is! Map<String, dynamic>) return null;

    final exp = payload['exp'];
    if (exp is! int) return null;
    return DateTime.fromMillisecondsSinceEpoch(exp * 1000);
  } catch (_) {
    return null;
  }
}
