package com.xindazhou.user.framework.config;

import com.xindazhou.framework.common.biz.infra.logger.LoginLogCommonApi;
import com.xindazhou.framework.common.biz.infra.logger.dto.LoginLogCreateReqDTO;
import com.xindazhou.framework.common.pojo.CommonResult;
import com.xindazhou.user.service.logger.LoginLogService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.scheduling.annotation.Async;

/**
 * 登录日志本地配置
 * 
 * 提供本地的 LoginLogCommonApi 实现
 * 直接调用本地的 LoginLogService
 * 避免使用 Feign 调用远程服务（登录日志功能已经集成到 user-server 中）
 *
 * @author 新大洲
 */
@Configuration
@Slf4j
public class LoginLogLocalConfiguration {

    /**
     * 创建本地的 LoginLogCommonApi 实现
     * 直接调用本地的 LoginLogService，不使用 Feign
     */
    @Bean
    @Primary
    public LoginLogCommonApi loginLogCommonApi(LoginLogService loginLogService) {
        return new LoginLogCommonApi() {
            @Override
            public CommonResult<Boolean> createLoginLog(LoginLogCreateReqDTO reqDTO) {
                try {
                    loginLogService.createLoginLog(reqDTO);
                    return CommonResult.success(true);
                } catch (Exception e) {
                    log.error("[createLoginLog][同步记录登录日志失败] reqDTO={}", reqDTO, e);
                    return CommonResult.error(500, "记录登录日志失败");
                }
            }

            @Override
            @Async
            public void createLoginLogAsync(LoginLogCreateReqDTO reqDTO) {
                try {
                    loginLogService.createLoginLog(reqDTO);
                } catch (Exception e) {
                    // 异步方法中的异常不应该影响调用方，只记录错误日志
                    log.error("[createLoginLogAsync][异步记录登录日志失败] reqDTO={}", reqDTO, e);
                }
            }
        };
    }

}

