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

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.rf.psychological.dao.dto.scale.NewResultDto;
import com.rf.psychological.utils.Constant;

import java.util.*;

/**
 * @author zsy
 * @description:抑郁症筛查量表
 * @date 2021/7/20 15:55
 */
public class PHQScale extends BaseScale{

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

    public  JSONObject scaleCalculate() throws Exception {

        // 自定义路径使用
        /*ScaleUtil.getScaleDll("PHQScale.dll");
        System.out.println("JSONArray:"+jsonArray);
        System.out.println("resultJson:"+resultJson);
        XScale xScale = new XScale(jsonArray,resultJson);
        String result = xScale.PHQScale(jsonArray.toString(), resultJson.toString());
        //System.out.println("dllresult:"+result);
        //解决排序问题
        LinkedHashMap<String, Object> jsonMap = JSON.parseObject(result,LinkedHashMap.class, Feature.OrderedField);
        JSONObject jsonObject = new JSONObject(true);
        jsonObject.putAll(jsonMap);
        System.out.println("jsonObject:"+jsonObject);
        return jsonObject;*/

        //得分
        int score = 0;
        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            if (jsonObject1.getString("checkItems").equals("有几天")) {
                score += 1;
            } else if (jsonObject1.getString("checkItems").equals("一半时间以上")) {
                score += 2;
            } else if (jsonObject1.getString("checkItems").equals("几乎每天")) {
                score += 3;
            }
        }
        //新版本数据格式
        Map<String, Object> newResult = new LinkedHashMap<>();

        //返回值以及存数据库格式
        List<NewResultDto> newResultDtos = new ArrayList<>();


        //得分列表
        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("总分", String.valueOf(score));
        resultJson.put("总分", String.valueOf(score));
        if (score <= 27 && score >= 20){
            resultMap.put("结论", "可能有重度忧郁症(一定要看心理医生或精神科医生)");
            resultJson.put("结论", "可能有重度忧郁症(一定要看心理医生或精神科医生)");
            newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "可能有重度忧郁症", "一定要看心理医生或精神科医生", "无",
                    "无", "无", "无", "是"));
        }else if (score <= 19 && score >= 15){
            resultMap.put("结论", "可能有中重度忧郁症(建议咨询心理医生或精神科医生)");
            resultJson.put("结论", "可能有中重度忧郁症(建议咨询心理医生或精神科医生)");
            newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "可能有中重度忧郁症", "建议咨询心理医生或精神科医生", "无",
                    "无", "无", "无", "是"));
        }else if (score <= 14 && score >= 10){
            resultMap.put("结论", "可能有中度忧郁症 (最好咨询心理医生或心理医学工作者)");
            resultJson.put("结论", "可能有中度忧郁症 (最好咨询心理医生或心理医学工作者)");
            newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "可能有中重度忧郁症", "最好咨询心理医生或心理医学工作者", "无",
                    "无", "无", "无", "是"));
        }else if (score <= 9 && score >= 5){
            resultMap.put("结论", "可能有轻微忧郁症(建议咨询心理医生或心理医学工作者)");
            resultJson.put("结论", "可能有轻微忧郁症(建议咨询心理医生或心理医学工作者)");
            newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "可能有轻微忧郁症", "建议咨询心理医生或心理医学工作者", "无",
                    "无", "无", "无", "是"));
        }else if (score <= 4 && score >= 0){
            resultMap.put("结论", "没有忧郁症(注意自我保重)");
            resultJson.put("结论", "没有忧郁症(注意自我保重)");
            newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "没有忧郁症", "注意自我保重", "无",
                    "无", "无", "无", "是"));
        }
        if (jsonArray.getJSONObject(0).getString("checkItems").equals("一半时间以上")
                || jsonArray.getJSONObject(0).getString("checkItems").equals("几乎每天")
                || jsonArray.getJSONObject(3).getString("checkItems").equals("一半时间以上")
                || jsonArray.getJSONObject(3).getString("checkItems").equals("几乎每天")
                ||jsonArray.getJSONObject(8).getString("checkItems").equals("一半时间以上")
                || jsonArray.getJSONObject(8).getString("checkItems").equals("几乎每天")){
            resultMap.put("提示", "测试者的心理问题需要关注，必要时需要去看心理咨询与精神科医生。");
            resultJson.put("提示", "测试者的心理问题需要关注，必要时需要去看心理咨询与精神科医生。");
            newResultDtos.add(new NewResultDto("提示", "无", "无", "测试者的心理问题需要关注，必要时需要去看心理咨询与精神科医生。", "无",
                    "无", "无", "无", "否"));
        }

        //需要图表展示的
        newResult.put("iconInfo", "");
        newResult.put("result", newResultDtos);


        List<Map<String,String>> resultMapList = new ArrayList<>();
        resultMapList.add(resultMap);

        JSONObject returnJson = new JSONObject(true);
        returnJson.put("resultMapList",resultMapList);
        returnJson.put("scaleName", Constant.SHEET_NAME_PHQ_9);
        returnJson.put("resultJson",resultJson);
        returnJson.put("newResultJson", newResult);

        return returnJson;
    }
}
