//package com.emoon.tongue.utils;
//
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.security.Keys;
//import org.apache.commons.codec.digest.DigestUtils;
//import com.fasterxml.jackson.databind.ObjectMapper;
//
//import javax.crypto.SecretKey;
//import java.util.HashMap;
//import java.util.Map;
//import java.util.UUID;
//
///**
// * @author wangkang
// * @description:
// * @date 2025/12/3 17:04
// */
//public class JwtUtil {
//    // 对称密钥（平台分配，需妥善保管，至少 32个 Byte 的密钥）
//    private static final String SECRET_KEY = "td-smp-secret-20250101xxxx-secure-key-for-hmac-sha256-algorithm";
//    private static final SecretKey HS256_KEY = Keys.hmacShaKeyFor(SECRET_KEY.getBytes());
//    private static final ObjectMapper OBJECT_MAPPER = new ObjectMapper();
//
//    /**
//     * 生成JWT（含请求体MD5校验）
//     *
//     * @param projectId   项目ID
//     * @param requestId   请求ID
//     * @param requestBody 请求体对象
//     * @return JWT字符串
//     */
//    public static String generateJwt(String projectId, String requestId, Object requestBody) {
//        try {
//            // 生成请求体MD5摘要
//            String bodyJson = OBJECT_MAPPER.writeValueAsString(requestBody);
//            String bodyMd5 = DigestUtils.md5Hex(bodyJson).toLowerCase();
//
//            long now = System.currentTimeMillis();
//            return Jwts.builder()
//                .header()
//                .add("alg", "HS256")
//                .add("typ", "JWT")
//                .add("kid", "td-smp-202501")
//                .and()
//                .claim("iss", "upstream-system-01")
//                .claim("sub", "td-smp-inference")
//                .claim("exp", (now + 5 * 60 * 1000) / 1000) // 5分钟过期
//                .claim("nbf", (now - 60 * 1000) / 1000)     // 提前1分钟生效
//                .claim("iat", now / 1000)
//                .claim("jti", UUID.randomUUID().toString())
//                .claim("requestId", requestId)
//                .claim("projectId", projectId)
//                .claim("bodyMd5", bodyMd5) // 请求体MD5摘要
//                .signWith(HS256_KEY)       // 对称密钥签名
//                .compact();
//        } catch (Exception e) {
//            throw new RuntimeException("生成JWT失败", e);
//        }
//    }
//
//    public static void main(String[] args) {
//        Map<String, String> map = new HashMap<>();
//        map.put("key", "value");
//        System.out.println(generateJwt("projectId", UUID.randomUUID().toString(), map));
//    }
//}
//
