package userio.task;


import common.model.IOAccount4Web;
import common.repository.IOAccount4WebRepository;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;

import userio.model.Account;
import userio.model.PackageType;
import userio.model.SalesManLeader;
import userio.repository.IOAccountRepository;
import userio.repository.IOPackageTypeRepository;
import userio.repository.IOSalesManLeaderRepository;
import util.DateUtil;
import util.ValidateUtil;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * Created by mxq on 2017/12/25.
 */
public class IOAccountTask {
    private static Logger logger = LoggerFactory.getLogger(IOAccountTask.class);

    @Autowired
    IOAccountRepository accountRepository;

    @Autowired
    IOAccount4WebRepository account4WebRepository;

    @Autowired
    private IOPackageTypeRepository packageTypeRepository;

    @Autowired
    IOSalesManLeaderRepository salesManLeaderRepository;

    public void task(){
        logger.info("tkio task start :" + System.currentTimeMillis());


        //清空前一天数据
        account4WebRepository.deleteAll();
        List<IOAccount4Web> list = new ArrayList<>();

        //已过期的直接设置成过期
        List<Account> pastAccountList = accountRepository.findRootParentsPast(DateUtil.getBeforeDays(0));
        list.addAll(transform(pastAccountList, "已过期"));

        //未过期
        List<Account> unpastAccountList = accountRepository.findRootParentsUnPast(DateUtil.getBeforeDays(0));
        list.addAll(transform(unpastAccountList, "已激活"));

        List<Account> forbidenList = accountRepository.findRootParentsForidin();
        list.addAll(transform(forbidenList, "已禁用"));

        account4WebRepository.save(list);
        logger.info("tkio task end :" + System.currentTimeMillis());
    }

    List<IOAccount4Web> transform(List<Account> accounts, String status){
        List<SalesManLeader> SalesManLeader = salesManLeaderRepository.findAll();
        Map<Long, String> saleMap = new HashMap<>();
        for(SalesManLeader pt : SalesManLeader){
            saleMap.put((long)pt.getId(), pt.getEmail());
        }
        List<PackageType> packageTypeList = packageTypeRepository.findAll();
        Map<Long, String> map = new HashMap<>();
        for(PackageType pt : packageTypeList){
            map.put(pt.getId(), pt.getPackageName());
        }

        List<IOAccount4Web> list = new ArrayList<>();
        if(ValidateUtil.isValid(accounts)){
            for(Account ac : accounts){
                IOAccount4Web account4Web = new IOAccount4Web();
                account4Web.setStatus(status);
                account4Web.setPackageTypeId(ac.getPricelevel());
                account4Web.setAccountId(ac.getId());
                account4Web.setEmail(ac.getEmail());
                account4Web.setCompany(ac.getCompany());
                account4Web.setCreateDate(ac.getPubDate());
                account4Web.setPackageType(map.get(ac.getPricelevel()));
                account4Web.setPastDate(ac.getPastDate());
                account4Web.setUser(ac.getName());
                account4Web.setTell(ac.getPhone());
                account4Web.setBussinessMan(ac.getBussinessman());
                if(saleMap.containsKey(ac.getBussinessman())){
                    account4Web.setSaleEamil(saleMap.get(ac.getBussinessman()));
                }
                list.add(account4Web);
            }
        }
        return list;
    }
}