package com.njcn.serviceimpl.excelreport;

import com.njcn.mapper.excelreport.GetFlickerMapper;
import com.njcn.pojo.excelreport.ConditionData;
import com.njcn.pojo.excelreport.ReportValueData;
import com.njcn.service.excelreport.GetFlickerService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

@Service
public class GetFlickerServiceImpl implements GetFlickerService {
    @Autowired
    private GetFlickerMapper getFlickerMapper;

    @Override
    public List<ReportValueData> getFlickerData(ConditionData conditionData) {
        List<ReportValueData> list = new ArrayList<>();
        List<ReportValueData> listPlt = new ArrayList<>();
        List<ReportValueData> listPst = new ArrayList<>();

        //短时闪变
        List<Map<String, Object>> listFlicker = getFlickerMapper.getFlickerData(conditionData);
        //长时闪变
        List<Map<String, Object>> listLFlicker = getFlickerMapper.getLFlickerData(conditionData);

        //筛选结果为想要的数据格式
        if (0 < listFlicker.size() && null != listFlicker.get(0)) {
            transformData("S", listPst, listFlicker);
        }

        if (0 < listLFlicker.size() && null != listLFlicker.get(0)) {
            transformData("L", listPlt, listLFlicker);
        }

        Regroup.regroupData(listPst, true);
        Regroup.regroupData(listPlt, true);
        list.addAll(listPst);
        list.addAll(listPlt);

        return list;
    }

    @Override
    public List<ReportValueData> getPFlickerData(ConditionData conditionData) {
        List<ReportValueData> listPst = new ArrayList<>();
        List<Map<String, Object>> listFlicker = getFlickerMapper.getFlickerData(conditionData);
        //筛选结果为想要的数据格式
        if (0 < listFlicker.size() && null != listFlicker.get(0)) {
            transformData("S", listPst, listFlicker);
        }

        Regroup.regroupData(listPst, true);

        return listPst;
    }

    @Override
    public List<ReportValueData> getLFlickerData(ConditionData conditionData) {
        List<ReportValueData> listPlt = new ArrayList<>();
        List<Map<String, Object>> listLFlicker = getFlickerMapper.getLFlickerData(conditionData);

        if (0 < listLFlicker.size() && null != listLFlicker.get(0)) {
            transformData("L", listPlt, listLFlicker);
        }

        Regroup.regroupData(listPlt, true);
        return listPlt;
    }

    private void transformData(String str, List<ReportValueData> list, List<Map<String, Object>> listMap) {
        for (Map<String, Object> map : listMap) {
            ReportValueData value = new ReportValueData();
            setData(str, value, list, map);
        }
    }

    private void setData(String str, ReportValueData reportValueData, List<ReportValueData> list, Map<String, Object> map) {
        reportValueData.setPhaseType(map.get("PHASETYPE").toString());
        reportValueData.setMeanValue(new Float(((BigDecimal) map.get("P" + str + "T")).floatValue()));
        reportValueData.setFmaxValue(new Float(((BigDecimal) map.get("P" + str + "T_MAX")).floatValue()));
        reportValueData.setMinValue(new Float(((BigDecimal) map.get("P" + str + "T_MIN")).floatValue()));

        if (map.containsKey("P" + str + "T_CP95")) {
            reportValueData.setCp95Value(new Float(((BigDecimal) map.get("P" + str + "T_CP95")).floatValue()));
        } else {
            reportValueData.setCp95Value(null);
        }

        list.add(reportValueData);
    }
}
