package com.haha.admin.task;

import com.haha.common.utils.TraceIdUtils;
import com.haha.service.TimedDiscountService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

@Slf4j
@Component
@RequiredArgsConstructor
public class TimedDiscountTask {

    private final TimedDiscountService timedDiscountService;

    @Scheduled(cron = "0 0/5 * * * ?")
    public void executeTimedDiscount() {
        // 生成独立的 TraceId 用于日志追踪
        String traceId = TraceIdUtils.generateTraceId();
        TraceIdUtils.setTraceId(traceId);
        
        log.info("开始检查定时折扣活动执行");
        try {
            timedDiscountService.executeAllEnabledActivities();
            log.info("定时折扣活动检查完成");
        } catch (Exception e) {
            log.error("定时折扣活动执行失败", e);
        } finally {
            // 清理 MDC 上下文
            TraceIdUtils.removeTraceId();
        }
    }

    @Scheduled(cron = "0 0 6 * * ?")
    public void restorePrices() {
        // 生成独立的 TraceId 用于日志追踪
        String traceId = TraceIdUtils.generateTraceId();
        TraceIdUtils.setTraceId(traceId);
        
        log.info("开始执行价格恢复任务");
        try {
            timedDiscountService.restorePrices();
            log.info("价格恢复任务执行完成");
        } catch (Exception e) {
            log.error("价格恢复任务执行失败", e);
        } finally {
            // 清理 MDC 上下文
            TraceIdUtils.removeTraceId();
        }
    }

    @Scheduled(cron = "0 5 * * * ?")
    public void updateSalesStatistics() {
        // 生成独立的 TraceId 用于日志追踪
        String traceId = TraceIdUtils.generateTraceId();
        TraceIdUtils.setTraceId(traceId);
        
        log.info("开始执行销售统计更新任务");
        try {
            timedDiscountService.updateSalesStatistics();
            log.info("销售统计更新任务执行完成");
        } catch (Exception e) {
            log.error("销售统计更新任务执行失败", e);
        } finally {
            // 清理 MDC 上下文
            TraceIdUtils.removeTraceId();
        }
    }
}
