package tkio.task;

import common.model.Account4Web;
import common.repository.Account4WebRepository;
import common.task.SyncAppDataTask;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import tkio.model.Account;
import tkio.model.AccountRestrict4Web;
import tkio.model.PackageType;
import tkio.model.SalesManLeader;
import tkio.repository.AccountRepository;
import tkio.repository.PackageTypeRepository;
import tkio.repository.SalesManLeaderRepository;
import tkio.service.AccountFlowRestrictService;
import util.DateUtil;
import util.ValidateUtil;

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 AccountTask {
    private static Logger logger = LoggerFactory.getLogger(AccountTask.class);

    @Autowired
    AccountRepository accountRepository;

    @Autowired
    Account4WebRepository account4WebRepository;

    @Autowired
    AccountFlowRestrictService accountFlowRestrictService;

    @Autowired
    private PackageTypeRepository packageTypeRepository;

    @Autowired
    SalesManLeaderRepository salesManLeaderRepository;

    public void task(){
        logger.info("tkio task start :" + System.currentTimeMillis());
        //清空前一天数据
        account4WebRepository.deleteAll();
        List<Account4Web> list = new ArrayList<>();
        //未过期的查询是否流量到期
        List<Account> accountValidList = accountRepository.findRootParentsUnPast(DateUtil.getBeforeDays(1));
        if(ValidateUtil.isValid(accountValidList)){
            for(Account ac : accountValidList){
                try{
                    AccountRestrict4Web restrict4Web = accountFlowRestrictService.findRestrictByAccount(ac.getId());
                    Account4Web account4Web = new Account4Web();
                    account4Web.setAccountId(ac.getId());
                    account4Web.setEmail(ac.getEmail());
                    account4Web.setCompany(ac.getCompany());
                    account4Web.setCreateDate(ac.getPubDate());
                    account4Web.setCreateDs(DateUtil.getFormatDate(ac.getPubDate()));
                    account4Web.setStatus(null == restrict4Web.getIOFlowNotified() ? "已激活" : (restrict4Web.getIOFlowNotified() ? "已激活" : "流量用尽"));
                    account4Web.setPackageType(restrict4Web.getPackageName());
                    account4Web.setPastDate(ac.getPastDate());
                    if (ac.getPricelevel().equals(7L) || ac.getPricelevel().equals(8L) || ac.getPricelevel().equals(5L) || ac.getPricelevel().equals(6L)){
                        account4Web.setIo(restrict4Web.getThisMonthIOFlow());
                        account4Web.setTrack(restrict4Web.getTrackTotalFlow());
                    }else{
                        account4Web.setIo(restrict4Web.getThisMonthIOFlow());
                        account4Web.setTrack(restrict4Web.getTrackTotalFlow());
                        account4Web.setIoLimit(restrict4Web.getIOLimit());
                        account4Web.setTrackLimit(restrict4Web.getTrackLimit());
                        account4Web.setIoStatus(restrict4Web.getAllowBehavior());
                        account4Web.setTrackStatus(restrict4Web.getTrackFlowNotified());
                        double f = 1.0;
                        if((account4Web.getIo().doubleValue() != 0) && (null != account4Web.getIoLimit())){
                            if((account4Web.getIo().doubleValue() / account4Web.getIoLimit().doubleValue()) > f){
                                account4Web.setIoStatus(false);
                                account4Web.setStatus("流量用尽");
                            }
                        }
                        if((account4Web.getTrack().doubleValue() != 0) && (null != account4Web.getTrackLimit())){
                            if((account4Web.getTrack().doubleValue() / account4Web.getTrackLimit().doubleValue()) > f){
                                account4Web.setTrackStatus(false);
                                account4Web.setStatus("流量用尽");
                            }
                        }
                    }
                    account4Web.setUser(ac.getName());
                    account4Web.setTell(ac.getPhone());
                    account4Web.setBussinessMan(ac.getBussinessman());
                    list.add(account4Web);
                } catch (Exception e){
                    logger.error("tkio task error :" + ac.getEmail());
                }

            }
        }
        //已过期的直接设置成过期
        List<Account> pastAccountList = accountRepository.findRootParentsPast(DateUtil.getBeforeDays(0));
        List<PackageType> packageTypeList = packageTypeRepository.findAll();
        Map<Long, String> map = new HashMap<>();
        for(PackageType pt : packageTypeList){
            map.put(pt.getId(), pt.getPackageName());
        }
        if(ValidateUtil.isValid(pastAccountList)){
            for(Account ac : pastAccountList){
                Account4Web account4Web = new Account4Web();
                account4Web.setAccountId(ac.getId());
                account4Web.setEmail(ac.getEmail());
                account4Web.setCompany(ac.getCompany());
                account4Web.setCreateDate(ac.getPubDate());
                account4Web.setStatus("已过期");
                account4Web.setPackageType(map.get(ac.getPricelevel()));
                account4Web.setPastDate(ac.getPastDate());
                account4Web.setIoStatus(false);
                account4Web.setTrackStatus(false);
                account4Web.setUser(ac.getName());
                account4Web.setTell(ac.getPhone());
                account4Web.setBussinessMan(ac.getBussinessman());
                list.add(account4Web);
            }
        }
        account4WebRepository.save(list);
        logger.info("tkio task end :" + System.currentTimeMillis());
    }
}
