//package com.ruoyi.web.core.wvp;
//import com.ruoyi.common.constant.Constants;
//import com.ruoyi.common.utils.StringUtils;
//import com.ruoyi.common.utils.http.HttpResponse;
//import com.ruoyi.web.core.wvp.domain.ApiResponse;
//import com.ruoyi.web.core.wvp.domain.Login;
//import com.ruoyi.common.core.redis.RedisCache;
//import com.ruoyi.common.utils.poi.ExcelUtil;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.stereotype.Component;
//
//import java.net.HttpURLConnection;
//import java.nio.charset.StandardCharsets;
//import java.security.MessageDigest;
//import java.security.NoSuchAlgorithmException;
//import java.util.HashMap;
//import java.util.concurrent.Executors;
//import java.util.concurrent.ScheduledExecutorService;
//import java.util.concurrent.TimeUnit;
//
//import static com.ruoyi.common.utils.http.HttpUtils.sendHttpGet;
//
//@Component
//public class SessionHandler {
//    @Autowired
//    private RedisCache redisCache;
//
//    @Value(value = "${wvp.addr}")
//    private String addr;
//
//    @Value(value = "${wvp.username}")
//    private String username;
//
//    @Value(value = "${wvp.password}")
//    private String password;
//
//    private final String WVP_TOKEN = "WVP_TOKEN";
//
//    //token有效期 10分钟
//    private final Integer WVP_TOKEN_EXPIRATION = 10;
//
//    public final Logger log = LoggerFactory.getLogger(ExcelUtil.class);
//
//    private long lastLoginTime;
//
//    public SessionHandler(){
//        // 启动定时任务
//        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
//        scheduler.scheduleAtFixedRate(
//                this::loginWVP,
//                1,
//                20*60,
//                TimeUnit.SECONDS
//        );
//    }
//
//    //登录WVP
//    private String loginWVP() {
//        try {
//            String url= addr+ "/api/user/login?username="+username+"&password="+hashPassword(password);
//            HttpResponse response = sendHttpGet(url, StringUtils.EMPTY, Constants.UTF8,new HashMap<>());
//
//            if(response.getStatusCode() == HttpURLConnection.HTTP_OK) {
//                // 处理响应
//                ApiResponse<Login> apiResponse = ApiResponseParser.parseFullResponse(response.getContent(), Login.class);
//                if (apiResponse.getCode() != null && apiResponse.getCode() == 0) {
//                    Login loginInfo = apiResponse.getData();
//                    redisCache.setCacheObject(WVP_TOKEN, loginInfo.getAccessToken(), WVP_TOKEN_EXPIRATION, TimeUnit.MINUTES);
//                    lastLoginTime = System.currentTimeMillis();
//                    return loginInfo.getAccessToken();
//                } else {
//                    throw new RuntimeException(apiResponse.getMsg());
//                }
//            }else{
//                throw new RuntimeException("登录失败");
//            }
//        }catch (Exception e){
//           log.error("请求失败: " + e.getMessage());
//        }
//        return null;
//    }
//
//    public long getLastLoginTime(){
//        return lastLoginTime;
//    }
//
//    public String getToken(){
//        String token =  redisCache.getCacheObject(WVP_TOKEN);
//        if (token == null) {
//           return loginWVP();
//        }
//        return token;
//    }
//
//    public boolean needRelogin(){
//        return  (System.currentTimeMillis() - lastLoginTime > WVP_TOKEN_EXPIRATION*60*1000);
//    }
//
//    public String refreshToken(){
//        redisCache.deleteObject(WVP_TOKEN);
//        return loginWVP();
//    }
//
//    private static String hashPassword(String password) {
//        try {
//            // MD5
//            MessageDigest digest = MessageDigest.getInstance("MD5");
//            byte[] hashBytes = digest.digest(password.getBytes(StandardCharsets.UTF_8));
//
//            // byte数组转成16进制的字符串
//            StringBuilder hexString = new StringBuilder();
//            for (byte b : hashBytes) {
//                String hex = Integer.toHexString(0xff & b);
//                if (hex.length() == 1) {
//                    hexString.append('0');
//                }
//                hexString.append(hex);
//            }
//            return hexString.toString();
//        } catch (NoSuchAlgorithmException e) {
//            throw new RuntimeException("MD5 algorithm not found", e);
//        }
//    }
//}
