package com.dora.listener;

import com.dora.event.UserGainedFanEvent;
import com.dora.service.PromotionLevelService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;

/**
 * 用户事件监听器
 * 负责处理用户相关的各种事件，实现自动更新机制
 */
@Component
@RequiredArgsConstructor
@Slf4j
public class UserEventListener {

    private final PromotionLevelService promotionLevelService;

    /**
     * 监听用户获得新粉丝事件
     * 
     * 注意：推广等级更新功能已停用。根据新的设计，推广等级仅在用户注册时更新，
     *       以避免重复计算和提高系统性能。
     */
    @EventListener
    @Async
    public void handleUserGainedFan(UserGainedFanEvent event) {
        try {
            log.info("处理用户获得粉丝事件：用户{}，粉丝{}，是否付费：{}", 
                    event.getUserId(), event.getFanId(), event.isPaidFan());
            
            // 推广等级更新已停用 - 现在仅在用户注册时更新等级
            // 这样可以避免重复计算，大幅提高系统性能
            if (event.isPaidFan()) {
                log.debug("用户{}获得付费粉丝{}，但推广等级更新已停用（仅在注册时更新）", 
                        event.getUserId(), event.getFanId());
                
                // 原来的更新逻辑已停用：
                // promotionLevelService.updateUserPromotionLevel(event.getUserId());
                
                // 如果未来需要重新启用等级更新，请使用：
                // promotionLevelCalculator.updateUserPromotionLevelOnRegistration(event.getUserId());
            }
            
            // 这里可以添加其他非等级相关的业务逻辑
            // 例如：发送通知、更新统计数据等
            
        } catch (Exception e) {
            log.error("处理用户获得粉丝事件失败：用户{}，错误：{}", event.getUserId(), e.getMessage(), e);
        }
    }
} 