package com.xindazhou.user.framework.config;

import com.xindazhou.framework.common.biz.system.permission.PermissionCommonApi;
import com.xindazhou.framework.security.core.rpc.LoginUserRequestInterceptor;
import com.xindazhou.framework.security.core.service.SecurityFrameworkService;
import com.xindazhou.framework.security.core.service.SecurityFrameworkServiceImpl;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.cloud.openfeign.EnableFeignClients;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 用户服务安全配置
 * 
 * 说明：
 * 1. 用户服务中的会员管理接口需要权限检查
 * 2. 权限数据在业务服务数据库中，所以需要通过 Feign 调用业务服务的 PermissionCommonApi
 * 3. 手动配置 PermissionCommonApi 的 Feign 客户端（不启用 OAuth2TokenCommonApi 的 Feign 客户端）
 */
@Configuration
public class UserSecurityConfiguration {

    /**
     * 手动注册 LoginUserRequestInterceptor
     * 用于在 Feign 调用时传递用户信息
     */
    @Bean
    public LoginUserRequestInterceptor loginUserRequestInterceptor() {
        return new LoginUserRequestInterceptor();
    }

    /**
     * 提供 SecurityFrameworkService 实现
     * 使用 Feign 客户端调用业务服务的 PermissionCommonApi
     */
    @Bean("ss")
    @ConditionalOnMissingBean(SecurityFrameworkService.class)
    public SecurityFrameworkService securityFrameworkService(PermissionCommonApi permissionApi) {
        return new SecurityFrameworkServiceImpl(permissionApi);
    }

}
