package com.haha.miniapp.config;

import cn.dev33.satoken.interceptor.SaInterceptor;
import cn.dev33.satoken.stp.StpUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Slf4j
@Configuration
public class SaTokenConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册Sa-Token拦截器
        registry.addInterceptor(new SaInterceptor(handle -> {
            String tokenValue = StpUtil.getTokenValue();
            
            if (tokenValue != null && !tokenValue.isEmpty()) {
                log.info("[Sa-Token] 从请求头读取到token: {}", maskToken(tokenValue));
            } else {
                log.warn("[Sa-Token] 未找到token");
            }

            // 执行登录校验
            StpUtil.checkLogin();
        }))
        .addPathPatterns("/**")
        .excludePathPatterns(
            "/login/**",           // 登录接口
            "/health/**",          // 健康检查接口
            "/callback/**",        // 第三方回调接口
            "/device/products/**"  // 设备商品陈列查询（允许未登录查看）
        );
    }
    
    /**
     * 遮蔽token敏感信息，只显示前后几位
     */
    private String maskToken(String token) {
        if (token == null || token.length() <= 8) {
            return "***";
        }
        return token.substring(0, 4) + "****" + token.substring(token.length() - 4);
    }
}
