//package com.kospo.talk.service;
//
//import java.time.LocalDateTime;
//import java.util.HashMap;
//import java.util.List;
//
//import com.kospo.talk.model.User;
//import com.kospo.talk.payload.StressDto;
//import com.kospo.talk.repository.UserRepository;
//import lombok.*;
//import org.springframework.amqp.rabbit.core.RabbitTemplate;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.beans.factory.annotation.Value;
//import org.springframework.scheduling.annotation.Scheduled;
//import org.springframework.stereotype.Service;
//
//import com.kospo.talk.model.SmUser;
//import com.kospo.talk.repository.MentalRepository;
//import com.kospo.talk.repository.SmUserRepository;
//import com.kospo.talk.repository.TalkMessageRepository;
//
////정신건강 스케줄러 서비스
//@Service
//public class MentalSchdulerService {
//    private SmUserRepository smUserRepository;
//    private MentalRepository mentalRepository;
//    private TalkMessageRepository talkMessageRepository;
//    @Autowired
//    private RabbitTemplate userTemplate;
//    @Autowired
//    private UserRepository userRepository;
//
//    @Value("${rabbitmq.user.exchange}")
//    private String userExchange;
//    @Value("${rabbitmq.user.route}")
//    private String userRoute;
//
//
//    public MentalSchdulerService(SmUserRepository smUserRepository, MentalRepository mentalRepository, TalkMessageRepository talkMessageRepository){
//        this.smUserRepository = smUserRepository;
//        this.mentalRepository = mentalRepository;
//        this.talkMessageRepository = talkMessageRepository;
//    }
//
//    public static HashMap<String,Integer> totalResult = new HashMap<String,Integer>();
//
//    // @Scheduled(fixedRate = 1000000)
//    @Scheduled(cron = "0 0 9-17 * * MON-FRI") //시간별로 작동
//    public void hoursMentalCarePreset(){
//        LocalDateTime now = LocalDateTime.now();
//        System.out.println("Start!!!   =>  " + now);
//        this.hoursCountSameQuestion();
//        this.hoursCountStressWords();
//        this.hoursCountSentenceLength();
//        System.out.println("End!!!   =>  " + now);
//    }
//
//    @Scheduled(cron = "0 0 8 * * MON-FRI") // 월-금 오전8시 한번 작동
//    public void dayMentalCarePreset(){
//        talkMessageRepository.resetStress();
//    }
//
//    //서브로직1. SameQuestion. 단어셋 개별 직전 1시간 발생횟수 카운트
//    private void hoursCountSameQuestion(){
//        List<SmUser> smUserList = smUserRepository.findAll();
//        String keywordCsv = mentalRepository.findByNo("0001").getKeyword();
//        String[] keywords = keywordCsv.split("\\|"); //키워드가 "|" 로 구분되어있으므로 해당 구분자로 스플릿하여 배열 생성
//
//        for(SmUser smUser : smUserList){
//            String sabun = smUser.getId().getSabun();
//            HashMap<String,Boolean> keyCount = new HashMap<String,Boolean>(); //<사번,결과>매핑
//            totalResult.put(sabun, 0);//totalResult에 사번 매핑 (빼면 calculate에서 null 뜸)
//            for(int i=0;i<keywords.length;i++){
//                int countTotal = 0;
//                int count = talkMessageRepository.hoursCountLogic1(sabun, keywords[i]);
//                if(count > 9) {
//                    countTotal++;
//                }
//                if(countTotal > 9){
//                    keyCount.put(sabun, Boolean.TRUE);
//                }else if(countTotal < 10){
//                    keyCount.put(sabun, Boolean.FALSE);
//                }else{
//                    System.out.println("<<Count Error>>  :  MentalSchdulerService.java ==> hoursCountSameQuestion()");
//                }
//            }
//            this.culculate(sabun + "(1)", keyCount);
//        }
//    }
//
//
//    //서브로직2. StressWords. 단어셋 전체 직전 1시간동안 몇번발생했는지 카운트.
//    private void hoursCountStressWords(){
//        List<SmUser> smUserList = smUserRepository.findAll();
//        HashMap<String,Boolean> userCount = new HashMap<String,Boolean>(); //<사번,결과>매핑
//        for(SmUser smUser : smUserList){
//            // String sabun = "psn23398";
//            String sabun = smUser.getId().getSabun();
//            String keywordNo = "0001";
//            // String date = "20250304";
//            int count = talkMessageRepository.hoursCountLogic2(sabun, keywordNo);
//            //카운트 10 이상 true, 이하 false
//            if(count > 9){
//                userCount.put(sabun,Boolean.TRUE);
//            }else if (count < 10){
//                userCount.put(sabun, Boolean.FALSE);
//            }else{//오류시 일로 빠지게 ㅇㅇ
//                System.out.println("<<Count Error>> :  MentalSchdulerService.java ==> hoursCountStressWords()");
//            }
//            this.culculate(sabun + "(2)", userCount);
//        }
//    }
//
//    //서브로직3. SentenceLength. 채팅량 감소 체크
//    private void hoursCountSentenceLength(){
//        List<SmUser> smUserList = smUserRepository.findAll();
//        HashMap<String,Boolean> senCount = new HashMap<String,Boolean>();
//        for(SmUser smUser : smUserList){
//            String sabun = smUser.getId().getSabun();
//            int count = talkMessageRepository.hoursCountLogic3(sabun); //감소량 계산 쿼리
//            if(count >= 10){
//                senCount.put(sabun, Boolean.TRUE); //10 이상 true
//            }else if(count < 10){
//                senCount.put(sabun + "(3)", Boolean.FALSE); //10 이하 false (음수 포함)
//            }else{
//                System.out.println("<<Count Error>> :  MentalSchdulerService.java ==> hoursCountSentenceLength()");
//            }
//            this.culculate(sabun + "(3)", senCount);
//        }
//    }
//
//    //1,2,3번 서브로직 결과 취합, 저장
//    private void culculate(String sabun, HashMap<String,Boolean> count){
//        String culSabun = null;
//
//        if(sabun.endsWith("(1)") || sabun.endsWith("(2)") || sabun.endsWith("(3)")){
//            culSabun = sabun.replaceAll("\\(\\d\\)","");
//            Boolean flag = count.get(culSabun);
//            if(flag == null)flag = Boolean.FALSE;
//            if(Boolean.TRUE.equals(flag)){
//                totalResult.put(culSabun,totalResult.get(culSabun) + 1);
//            }else if(Boolean.FALSE.equals(flag)){
//                totalResult.put(culSabun,totalResult.get(culSabun) + 0);
//            }
//        }
//        System.out.println("sabun : value  ==>  " + culSabun+"("+sabun+")  :  " + totalResult.get(culSabun));
//        try {
//            User user = userRepository.findById(culSabun).get();
//            user.setStress(totalResult.get(culSabun).toString());
//            userRepository.save(user);
//            if (user.isOnlineYn()) {
//                userTemplate.convertAndSend(userExchange, userRoute + culSabun, StressDto.builder()
//                        .type("STRESS")
//                        .stress(totalResult.get(culSabun).toString())
//                        .build());
//            }
//        } catch(Exception e) {
//            new RuntimeException(e.getMessage());
//        }
//
//    }
//
//
//
//
//    // @Scheduled(fixedRate = 1000)
//    // public void testSchedule(){
//    //     System.out.println("도나요?");
//    // }
//}