package tkio.task;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;

import common.model.Account4Web;
import common.model.Reminder;
import common.model.User;
import common.repository.Account4WebRepository;
import common.repository.ReminderRepository;
import common.repository.UserRepository;
import dic.RoleEnum;
import tkio.model.SalesManLeader;
import tkio.repository.SalesManLeaderRepository;
import tkio.service.SendEmailService;
import util.ValidateUtil;

/**
 * Created by mxq on 2017/12/25.
 */
public class SendEmailTask {


    @Autowired
    Account4WebRepository account4WebRepository;

    @Autowired
    SalesManLeaderRepository salesManLeaderRepository;

    @Autowired
    UserRepository userRepository;
    @Autowired
    ReminderRepository reminderRepository;
    @Autowired
    SendEmailService sendEmailService;

    public void task(){
        //清空前一天数据
        List<Account4Web> account4WebList = account4WebRepository.findPast();
        if(ValidateUtil.isValid(account4WebList)){
            Map<Long, List<String>> map = new HashMap<>();
            for(Account4Web aw : account4WebList){
                if(map.containsKey(0L)){
                    List<String> list = map.get(0L);
                    list.add(aw.getEmail());
                    map.put(aw.getBussinessMan(), list);
                } else {
                    List<String> list = new ArrayList<>();
                    list.add(aw.getEmail());
                    map.put(0L, list);
                }
                if(null != aw.getBussinessMan()){
                    if(map.containsKey(aw.getBussinessMan())){
                        List<String> list = map.get(aw.getBussinessMan());
                        list.add(aw.getEmail());
                        map.put(aw.getBussinessMan(), list);
                    } else {
                        List<String> list = new ArrayList<>();
                        list.add(aw.getEmail());
                        map.put(aw.getBussinessMan(), list);
                    }
                }
            }

            List<SalesManLeader> salesManLeaders = salesManLeaderRepository.findAll();
            Map<String, List<Long>> saleMap = new HashMap<>();
            if(ValidateUtil.isValid(salesManLeaders)){
                for(SalesManLeader sml : salesManLeaders){
                    List<Long> idList = new ArrayList<>();
                    if(sml.getId() == 0 || sml.getId() == sml.getLeader()){//不是主管
                        Long id = (long)sml.getId();
                        idList.add(id);
                    }else{//是主管
                        for(SalesManLeader sml2 : salesManLeaders){
                            if(sml.getId() == sml2.getLeader()){
                                Long id = (long)sml.getId();
                                idList.add(id);
                            }
                        }
                    }
                    saleMap.put(sml.getEmail(), idList);
                }
            }
            List<Reminder> reminderList = reminderRepository.findAllDistinctFalse("tkio");
            Map<String, Boolean> reMap = new HashMap<>();
            if(ValidateUtil.isValid(reminderList)){
                for(Reminder re : reminderList){
                    reMap.put(re.getEmail(), re.getRemindStatus());
                }
            }
            List<User> userList = userRepository.findAll();
            
            //暂时去掉给larry和tony发送提醒邮件  add_by_zhangsy_20180820
            Iterator<User> it = userList.iterator();
            while(it.hasNext()) {
            	User user = it.next();
            	if(user.getEmail().equals("tony@reyun.com") || user.getEmail().equals("larry@reyun.com")) {
            		it.remove();
            	}
            }
            
            for(User user : userList){
                if(user.getRole().equals(RoleEnum.MANAGER.getKey())){
                    List<String> list = map.get(0L);
                    List<String> newList = new ArrayList<>();
                    for(String em : list){
                        if (reMap.containsKey(em)){
                            if(reMap.get(em)){
                                newList.add(em);
                            }
                        }else{
                            newList.add(em);
                        }
                    }
                    //sendEmail
                    sendEmailService.send(user.getEmail(), newList);
                } else if(saleMap.containsKey(user.getId())){
                    List<Long> idlist = saleMap.get(user.getId());
                    List<String> newList = new ArrayList<>();
                    for(Long id : idlist){
                        if(map.containsKey(id)){
                            List<String> list = map.get(id);
                            for(String em : list){
                                if (reMap.containsKey(em)){
                                    if(reMap.get(em)){
                                        newList.add(em);
                                    }
                                }else{
                                    newList.add(em);
                                }
                            }
                        }
                    }
                    //sendEmail
                    sendEmailService.send(user.getEmail(), newList);
                }
            }
        }

    }
}