package com.rf.psychological.scale.resultBusiness.cognitiveResult;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rf.psychological.dao.model.GBEEntity;
import com.rf.psychological.dao.model.SHAPE2Entity;
import com.rf.psychological.file.excel.ExcelClass;
import com.rf.psychological.scale.resultBusiness.scaleResult.BaseScale;
import com.rf.psychological.utils.Constant;
import com.rf.psychological.utils.ExcelUtil;

import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
 * @author zsy
 * @description:空间记忆能力测试
 * @date 2021/7/20 15:55
 */
public class REMCognize extends BaseScale {

    public REMCognize(JSONArray jsonArray, JSONObject resultJson) {
        super(jsonArray, resultJson);
    }

    public  JSONObject scaleCalculate() throws Exception {
        List<Map<String, String>> resultMapList = new ArrayList<>();
        JSONObject jsonObject = resultJson.getJSONObject("jsonObject");
        String fileName = resultJson.getString("fileName");
        String name;

        JSONObject resultDBJson = new JSONObject(true);

        String score = jsonObject.getString("userScore");
        JSONArray jsonArray = jsonObject.getJSONArray("userResponseRecords");
        List<SHAPE2Entity> shape2Entities = jsonArray.toJavaList(SHAPE2Entity.class);
        fileName = fileName + "-" + Constant.SHEET_NAME_REM + ".xlsx";
        name = Constant.SHEET_NAME_REM;
        int totalTime = 0;
        for (SHAPE2Entity shape2Entity : shape2Entities) {
            totalTime += shape2Entity.getResponseTime();
        }

        double meanTime = 0;
        DecimalFormat df = new DecimalFormat("######0.00");
        if (shape2Entities.size() != 0) {
            meanTime = Double.parseDouble(df.format(totalTime / shape2Entities.size()));
        }
        resultDBJson.put("versionNo",Constant.COGNITION_RESULT_VERSION);
        JSONArray totalScores = new JSONArray();
        JSONObject totalScore = new JSONObject(true);
        score = score.replace("%","");
        double correct = Double.valueOf(score);
        correct = Double.parseDouble(df.format(correct));
        totalScore.put("totalScore",correct);
        String desc = null;
        if (correct>90){
            desc = "优秀等级：您的空间感很强，比如您进入新环境生活，您能够很快记住当地地理位置、方位，哪里有什么商店、医院学校之类。您的方向感很好，在出行时不会迷路，无论是去哪里，您总能找到又好又快的路线。";
        }else if(correct>80 && correct<=90){
            desc = "较优秀等级：您的空间感较强，进入新环境生活工作，您能够较快地记住并找到当地商店、医院、学校等地方。您的方向感较好，在出行时一般不会迷路，且能找到较好较快的出行路线。";
        }else if(correct>60 && correct<=80){
            desc = "一般等级:您的空间感一般，不是很强也不是很差，在一个新环境，通过一定时间的适应，您也能够较好地记住当地学校、医院、商店等的方位。您的方向感不是很好也不是很差，您在出行时一般也很少迷路，通过一定思索也能选择合适的出行路线。";
        }else if(correct>50 && correct<=60){
            desc = "较差等级：您的空间感较差，进入新环境生活工作，您不能够很好地记住当地商店、医院、学校等地方，需要借助一定帮助才能找到。您的方向感较差，在出行有时会迷路，找到合适的出行路线较困难。";
        }else if(correct<=50){
            desc = "极差等级：您的空间感极差，进入新环境生活工作，您很难记住当地商店、医院、学校等地方，在很长一段时间内需要借助帮助才能找到。您的方向感极差，在出行时可能经常会迷路，找到合适的出行路线也可能非常困难。";
        }
        totalScore.put("totalScoreDesc",desc);
        totalScores.add(totalScore);
        resultDBJson.put("totalScore",totalScores);
        JSONObject ifShow = new JSONObject(true);
        ifShow.put("totalScore",true);
        ifShow.put("dimensions",false);
        ifShow.put("note",false);
        ifShow.put("radar",false);
        ifShow.put("table",false);
        resultDBJson.put("ifShow",ifShow);



        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("总分", score);
        resultDBJson.put("总分", score);
        resultMap.put("平均反应时", String.valueOf(meanTime));
        resultDBJson.put("平均反应时", String.valueOf(meanTime));
        resultMapList = new ArrayList<>();
        resultMapList.add(resultMap);

        String datas = jsonArray.toString();
        ExcelUtil.createExcelFile(SHAPE2Entity.class, shape2Entities, resultMapList, new ExcelClass().contentExcel(Constant.QUEST_TYPE_REM), fileName, Constant.SHEET_NAME_REM);

        JSONObject returnJson = new JSONObject(true);
        returnJson.put("fileName",fileName);
        returnJson.put("name", name);
        returnJson.put("resultJson",resultDBJson);
        returnJson.put("datas",datas);

        return returnJson;
    }


}
