//package com.cirle.scientific.questionnaire.initialization;
//
//import com.cirle.scientific.questionnaire.cache.SimpleQuestionnaireCache;
//import com.cirle.scientific.questionnaire.dto.SubmitAnswerDTO;
//import com.cirle.scientific.questionnaire.entity.QuestionnaireEntity;
//import com.cirle.scientific.questionnaire.exception.QuestionnaireNotFoundException;
//import com.cirle.scientific.questionnaire.queue.AnswerConsumer;
//import com.cirle.scientific.questionnaire.queue.AnswerProducer;
//import com.cirle.scientific.questionnaire.service.AnswerService;
//import com.cirle.scientific.questionnaire.service.QuestionnaireService;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.boot.ApplicationArguments;
//import org.springframework.boot.ApplicationRunner;
//import org.springframework.stereotype.Component;
//
//import java.util.*;
//import java.util.concurrent.BlockingQueue;
//import java.util.concurrent.LinkedBlockingQueue;
//
///**
// * 性能优化初始化器
// * <p>
// * 该类为“问卷”相关的性能优化做初始化工作，Spring Boot项目启动完成后将会调用该类进行初始化工作。
// * 相关的控制请到application.yaml中进行配置。
// */
//@SuppressWarnings("unused")
//@Component
//public class PerformanceInitializer implements ApplicationRunner {
//
//    private final boolean disable;
//    private final Set<String> optimizeItems;
//
//    @Autowired
//    private QuestionnaireService questionnaireService;
//
//    @Autowired
//    private AnswerService answerService;
//
//    public PerformanceInitializer(@Value("${qkyxzx.questionnaire.performance-optimization.enabled}") Boolean enabled, @Value("${qkyxzx.questionnaire.performance-optimization.items}") String[] items) {
//        disable = Boolean.FALSE.equals(enabled);
//        optimizeItems = new LinkedHashSet<>();
//        if (items == null) return;
//        Collections.addAll(optimizeItems, items);
//    }
//
//    @Override
//    public void run(ApplicationArguments args) {
//        if (disable) return;
//        if (optimizeItems.contains("questionnaire-query")) initQuestionnaireCache();
//        if (optimizeItems.contains("answer-submission")) initAnswerQueue();
//    }
//
//    /**
//     * 初始化问卷查询缓存
//     */
//    private void initQuestionnaireCache() {
//        // 查询所有问卷实体
//        List<QuestionnaireEntity> allQuestionnaires = questionnaireService.queryQuestionnaires();
//        // 获取所有问卷的主键
//        final Set<String> questionnaireIds = new LinkedHashSet<>();
//        allQuestionnaires.forEach(item -> questionnaireIds.add(item.getId()));
//        // 所有问卷详情实体
//        List<QuestionnaireEntity> allQuestionnaireWithInheritance = new ArrayList<>();
//        // 查询所有问卷详情实体
//        for (String id : questionnaireIds) {
//            QuestionnaireEntity questionnaire;
//            try {
//                questionnaire = questionnaireService.getQuestionnaire(id);
//            } catch (QuestionnaireNotFoundException e) {
//                // 应该永远不会发生
//                throw new IllegalStateException(e);
//            }
//            allQuestionnaireWithInheritance.add(questionnaire);
//        }
//        // 初始化缓存数据
//        SimpleQuestionnaireCache.init(allQuestionnaireWithInheritance);
//    }
//
//    /**
//     * 初始化答案提交队列
//     */
//    private void initAnswerQueue() {
//        final int capacity = 100;
//        BlockingQueue<Map<String, SubmitAnswerDTO>> answerQueue = new LinkedBlockingQueue<>(capacity);
//        AnswerProducer.init(answerQueue, questionnaireService);
//        AnswerConsumer.init(answerQueue, answerService);
//    }
//
//}
