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

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

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

        JSONObject resultDBJson = new JSONObject(true);

        String score = jsonObject.getString("userScore");
        JSONArray userResponseRecords = jsonObject.getJSONArray("userResponseRecords");

        List<MovementEntity> movementEntities = userResponseRecords.toJavaList(MovementEntity.class);

        resultDBJson.put("versionNo",Constant.COGNITION_RESULT_VERSION);
        JSONArray totalScores = new JSONArray();
        JSONObject totalScore = new JSONObject(true);
        score = score.replace("%","");
        double correct = Double.valueOf(score);
        DecimalFormat df = new DecimalFormat("######0.00");
        correct = Double.parseDouble(df.format(correct));
        totalScore.put("totalScore",score);
        String desc = null;
        //int correct = Integer.parseInt(score);
        if (correct>90){
            desc = "优秀等级：您具有很好的运动知觉能力，即您对周围事物的运动变化及其运动方向等的觉察辨识能力很好，比如在进行网球、乒乓球运动时，您能够很好地估计球的运动速度、变化方向。或者在过马路时，您能够很好地辨识出人流、车流的走向和速度。\n";
        }else if(correct>80 && correct<=90){
            desc = "较优秀等级：您具有较好的运动知觉能力，对周围事物的运动变化及其运动方向等的觉察辨识能力较好，比如在进行网球、乒乓球运动时，您能够较好地估计球的运动速度、变化方向。或者在过马路时，您也能够较好地辨识出人流、车流的走向和速度。\n";
        }else if(correct>60 && correct<=80){
            desc = "一般等级：您具有一般水平的运动知觉能力，对周围事物的运动变化及其运动方向等的觉察辨识能力不是很好也不会很差，比如在过马路时，您能够大概地辨识出人流、车流的走向和速度。\n";
        }else if(correct>50 && correct<=60){
            desc = "较差等级：您的运动知觉能力较差，即对周围事物的运动变化及其运动方向等的觉察辨识能力较差，比如在进行网球、乒乓球运动时，您不能很好地估计球的运动速度、变化方向。或者在过马路时，您也不能很好地辨识出人流、车流的走向和速度。";
        }else if(correct<=50){
            desc = "极差等级：您运动知觉能力很差，即对周围事物的运动变化及其运动方向等的觉察辨识能力很差，比如在进行网球、乒乓球运动时，您几乎不能够估计球的运动速度、变化方向。或者在过马路时，您也几乎不能够辨识出人流、车流的走向和速度。\n";
        }
        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);
        resultMapList = new ArrayList<>();
        resultMapList.add(resultMap);

        if (Constant.QUEST_TYPE_MOVEMENT.equals(type)){
            fileName = fileName + "-" + Constant.SHEET_NAME_MOVEMENT + ".xlsx";
            name = Constant.SHEET_NAME_MOVEMENT;
        }else {
            fileName = fileName + "-" + Constant.SHEET_NAME_MOVEMENT_CHILD + ".xlsx";
            name = Constant.SHEET_NAME_MOVEMENT_CHILD;
        }

        String datas = userResponseRecords.toString();
        ExcelUtil.createExcelFile(MovementEntity.class, movementEntities, resultMapList, new ExcelClass().contentExcel(Constant.QUEST_TYPE_MOVEMENT), 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;
    }


}
