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

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rf.psychological.dao.model.ObjectEntity;
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 MEMORYTCognize extends BaseScale {

    public MEMORYTCognize(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;
        String name;

        JSONObject resultDBJson = new JSONObject(true);

        String scoreOne = jsonObject.getString("userScoreOne");
        String scoreTwo = jsonObject.getString("userScoreTwo");
        fileName = resultJson.getString("fileName") + "-" + Constant.SHEET_NAME_MEMORYT + ".xlsx";
        name = Constant.SHEET_NAME_MEMORYT;
        JSONArray jsonArray = jsonObject.getJSONArray("userResponseRecords");
        List<SHAPE2Entity> shape2Entities = jsonArray.toJavaList(SHAPE2Entity.class);
        int rightNum = 0;
        for (SHAPE2Entity shape2Entity : shape2Entities){
            if (shape2Entity.getRightOrWrong().equals("Right")){
                rightNum ++;
            }
        }
        DecimalFormat df = new DecimalFormat("######0.00");
        String totalScore = Double.parseDouble(df.format((rightNum*100)/shape2Entities.size())) + "%";

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

        JSONObject dimension2 = new JSONObject(true);
        dimension2.put("name","2back");
        dimension2.put("score",scoreTwo);
        String desc2 = null;
        double correct2 = Double.valueOf(scoreTwo);
        correct2 = Double.parseDouble(df.format(correct2));
        //int correct2 = Integer.parseInt(scoreTwo);
        if (correct2>90){
            desc2 = "优秀等级：您的视觉空间工作记忆系统容量很大，在同样难度要求的情况下，相比大部分人，您能够记住更多的事物的空间位置信息且记住的时间更长久，但这并不代表您能够过目不忘。\n";
        }else if(correct2>80 && correct2<=90){
            desc2 = "较优秀等级：您的视觉空间工作记忆系统容量较大，在同样难度要求的情况下，相比一部分人，您能够记住的事物的空间位置信息多一些且记住的时间长一点，但过一段时间（1分钟之后）您也会慢慢忘记。\n";
        }else if(correct2>60 && correct2<=80){
            desc2 = "一般等级: 您的视觉空间工作记忆系统容量不是很大也不是很小，处于一般水平，在同样难度要求的情况下，您能够记住的事物的空间位置信息不会明显比一般人多也不会明显比一般人少，且过一段时间（1分钟之后）您会慢慢忘记。\n";
        }else if(correct2>50 && correct2<=60){
            desc2 = "较差等级：您的视觉空间工作记忆系统容量较小，在同样难度要求的情况下，您能够记住的事物的空间位置信息会比其他人少，且遗忘较快。\n";
        }else if(correct2<=50){
            desc2 = "极差等级：您的视觉空间工作记忆系统容量很小，在同样难度要求的情况下，您能够记住的事物的空间位置信息明显比大部分人少，且遗忘地很快。\n";
        }
        dimension2.put("Describe",desc2);
        dimension2.put("maximum",100);
        dimension2.put("groupName","第二组");
        list.add(dimension1);
        list.add(dimension2);
        resultDBJson.put("dimensions",list);
        //表格数据
        JSONArray tableModule = new JSONArray();
        JSONObject table1 = new JSONObject(true);
        JSONArray columnName = new JSONArray();
        columnName.add("指标名称");
        columnName.add("指标值");
        JSONArray columnValue = new JSONArray();
        columnValue.add("总正确率;1back正确率;2back正确率");
        columnValue.add(totalScore+";"+scoreOne + "%" +";"+scoreTwo + "%");
        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",true);
        ifShow.put("note",false);
        ifShow.put("radar",false);
        ifShow.put("table",true);
        resultDBJson.put("ifShow",ifShow);
        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("总正确率", totalScore);
        resultMap.put("1back正确率", scoreOne);
        resultMap.put("2back正确率", scoreTwo);
        resultDBJson.put("总正确率", totalScore);
        resultDBJson.put("1back正确率", scoreOne);
        resultDBJson.put("2back正确率", scoreTwo);
        resultMapList = new ArrayList<>();
        resultMapList.add(resultMap);
        String datas = jsonArray.toString();
        ExcelUtil.createExcelFile(SHAPE2Entity.class, shape2Entities, resultMapList, new ExcelClass().contentExcel(Constant.QUEST_TYPE_MEMORYT), fileName, Constant.SHEET_NAME_MEMORYT);

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

        return returnJson;
    }


}
