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

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rf.psychological.dao.model.MemoryTestEntity;
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:工作记忆测试（空间）2
 * @date 2021/7/20 15:55
 */
public class MEMORYT2Cognize extends BaseScale {

    public MEMORYT2Cognize(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 type = resultJson.getString("type");
        String fileName;
        String name;

        JSONObject resultDBJson = new JSONObject(true);

        //正确率
        String accuracy = jsonObject.getString("accuracy");
        //平均反应时
        String averageResponseTime = jsonObject.getString("averageResponseTime");
        if (Constant.QUEST_TYPE_MEMORYT2.equals(type)) {
            fileName = resultJson.getString("fileName") + "-" + Constant.SHEET_NAME_MEMORYT2 + ".xlsx";
            name = Constant.SHEET_NAME_MEMORYT2;
        } else {
            fileName = resultJson.getString("fileName") + "-" + Constant.SHEET_NAME_MEMORYTV3 + ".xlsx";
            name = Constant.SHEET_NAME_MEMORYTV3;
        }
        JSONArray jsonArray = jsonObject.getJSONArray("userResponseRecords");
        List<MemoryTestEntity> memoryTestEntities = jsonArray.toJavaList(MemoryTestEntity.class);

        resultDBJson.put("versionNo",Constant.COGNITION_RESULT_VERSION);
        //总分模块
        JSONArray totalScores = new JSONArray();
        JSONObject totalScoreObject = new JSONObject(true);
        totalScoreObject.put("totalScore",accuracy);
        String desc = null;
        double correct = Double.valueOf(accuracy.replace("%",""));
        if (correct>90){
            desc = "优秀等级：您的视觉空间工作记忆系统容量很大，在同样难度要求的情况下，相比大部分人，您能够记住更多的事物的空间位置信息且记住的时间更长久，但这并不代表您能够过目不忘。 ";
        }else if(correct>80 && correct<=90){
            desc = "较优秀等级：您的视觉空间工作记忆系统容量较大，在同样难度要求的情况下，相比一部分人，您能够记住的事物的空间位置信息多一些且记住的时间长一点，但过一段时间（1分钟之后）您也会慢慢忘记。";
        }else if(correct>70 && correct<=80){
            desc = "一般等级: 您的视觉空间工作记忆系统容量不是很大也不是很小，处于一般水平，在同样难度要求的情况下，您能够记住的事物的空间位置信息不会明显比一般人多也不会明显比一般人少，且过一段时间（1分钟之后）您会慢慢忘记。";
        }else if(correct>=60 && correct<=70){
            desc = "较差等级：您的视觉空间工作记忆系统容量较小，在同样难度要求的情况下，您能够记住的事物的空间位置信息会比其他人少，且遗忘较快。";
        }else if(correct<60){
            desc = "极差等级：您的视觉空间工作记忆系统容量很小，在同样难度要求的情况下，您能够记住的事物的空间位置信息明显比大部分人少，且遗忘地很快。";
        }
        totalScoreObject.put("totalScoreDesc",desc);
        totalScores.add(totalScoreObject);
        resultDBJson.put("totalScore", totalScores);

        //表格数据
        JSONArray tableModule = new JSONArray();
        JSONObject table1 = new JSONObject(true);
        JSONArray columnName = new JSONArray();
        columnName.add("指标名称");
        columnName.add("指标值");
        JSONArray columnValue = new JSONArray();
        columnValue.add("正确率;平均反应时");
        columnValue.add(accuracy+";"+averageResponseTime);
        table1.put("tableName","table1");
        table1.put("columnName",columnName);
        table1.put("columnValue",columnValue);
        tableModule.add(table1);
        resultDBJson.put("tableModule", tableModule);

        JSONObject ifShow = new JSONObject(true);
        ifShow.put("totalScore",true);
        ifShow.put("dimensions",false);
        ifShow.put("note",false);
        ifShow.put("radar",false);
        ifShow.put("table",true);
        resultDBJson.put("ifShow",ifShow);

        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("正确率", accuracy);
        resultMap.put("平均反应时", averageResponseTime);
        resultDBJson.put("正确率", accuracy);
        resultDBJson.put("平均反应时", averageResponseTime);
        resultMapList = new ArrayList<>();
        resultMapList.add(resultMap);
        String datas = jsonArray.toString();
        ExcelUtil.createExcelFile(MemoryTestEntity.class, memoryTestEntities, resultMapList, new ExcelClass().contentExcel(Constant.QUEST_TYPE_MEMORYT2), fileName, name);

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

        return returnJson;
    }


}
