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.dao.model.AnswerEntity;
import com.rf.psychological.dao.model.DimensionEntity;
import com.rf.psychological.scale.dao.model.ScaleMarksEntity;
import com.rf.psychological.scale.scaleresult.ScaleConstant;

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

/**
 * @author xbw
 * @description:Zung抑郁自我评价量表
 * @date 2021/10/31 11:00
 */
public class ZungDPScale extends BaseScale {
    public ZungDPScale(JSONArray jsonArray, JSONObject resultJson) {
        super(jsonArray, resultJson);
    }

    public JSONObject scaleCalculate() throws Exception {

        //总分
        double score = 0;
        Map<String, String> resultMap0 = new LinkedHashMap<>();
        List<Map<String, String>> resultMapList = new ArrayList<>();

        //获取答案列表
        List<AnswerEntity> answerEntities = (List<AnswerEntity>) resultJson.get("answerEntities");
        //获取评分规则列表
        List<ScaleMarksEntity> scaleMarksEntities = (List<ScaleMarksEntity>) resultJson.get("scaleMarksEntities");
        //获取维度信息列表
        List<DimensionEntity> dimensionEntities = (List<DimensionEntity>) resultJson.get("dimensionEntities");
        if (jsonArray.size() > 0) {
            //计算总分
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                for (AnswerEntity answerEntity : answerEntities) {
                    if (answerEntity.getQuestionNo().equals(String.valueOf(i + 1)) && answerEntity.getName().equals(jsonObject1.getString("checkItems"))) {
                        score += Double.valueOf(answerEntity.getScore());
                    }
                }
            }
            score = Math.floor(score * 1.25);
            resultMap0.put("ZungDP总分", String.valueOf(score));
            resultJson.put("ZungDP总分", String.valueOf(score));

            resultMapList.add(resultMap0);
        }

        JSONObject returnJson = new JSONObject(true);
        returnJson.put("resultMapList", resultMapList);
        //returnJson.put("scaleName",resultJson.getString("scaleName"));
        returnJson.put("resultJson", resultJson);

        return returnJson;
    }

    public JSONObject scaleCalculateV2() throws Exception {

        //总分
        double score = 0;
        Map<String, String> resultMap0 = new LinkedHashMap<>();
        List<Map<String, String>> resultMapList = new ArrayList<>();

        //新版本数据格式
        Map<String, Object> newResult = new LinkedHashMap<>();

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

        //获取答案列表
        List<AnswerEntity> answerEntities = (List<AnswerEntity>) resultJson.get("answerEntities");
        //获取评分规则列表
        List<ScaleMarksEntity> scaleMarksEntities = (List<ScaleMarksEntity>) resultJson.get("scaleMarksEntities");
        //获取维度信息列表
        List<DimensionEntity> dimensionEntities = (List<DimensionEntity>) resultJson.get("dimensionEntities");
        if (jsonArray.size() > 0) {
            //计算总分
            for (int i = 0; i < jsonArray.size(); i++) {
                JSONObject jsonObject1 = jsonArray.getJSONObject(i);
                for (AnswerEntity answerEntity : answerEntities) {
                    if (answerEntity.getQuestionNo().equals(String.valueOf(i + 1)) && answerEntity.getName().equals(jsonObject1.getString("checkItems"))) {
                        score += Double.valueOf(answerEntity.getScore());
                    }
                }
            }
            score = Math.floor(score * 1.25);
            if (score >= 25 && score <= 49) {
                newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "没有抑郁倾向，情绪心态正常。", "你的心境状况总体正常。你在日常生活中情绪较为饱满，很少出现压抑、抑郁、悲伤、失望、沮丧或忧伤的情绪体验；对自己的生活比较满意，遇到较大的困难时常能采取妥当而合理的方式加以解决，一般不采取逃避等消极处理方式；情绪自我调节能力较强，各方面技能都保持在正常水平，社会功能未受损害，能正常进行日常的工作和社交活动，并胜任当前的工作。", "无",
                        "无", "无", "你没有表现出抑郁症状。这是一个非常好的状态，说明你的情绪调节能力比较强，希望能继续保持自身的这一优势，保持这样一种良好的心理状态。需要提醒的是，情绪状态常会有所变化，因此仍需注意以下一-些问题，以防止将来受抑郁情绪的困扰，包括:不草率对事件下结论;学会理性的思考方式，避免情绪性推理;避免“我必须”，“我一定”这类的自我对话;对自身做出尽可能正确和公平的评价，相信他人的正确评价，不要否认他人的夸奖，不要认为他人说好话只是出于礼貌等。加强自身心理保健是远离抑郁的最佳方法。", "是"));
            } else if (score >= 50 && score <= 59) {
                newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "轻度抑郁状态", "你在平时生活中有时会表现出心境低落的状态，如压抑、抑郁、悲伤、失望、沮丧或忧伤。可能有时会对看不顺眼的事情发脾气，责备他人，有时也会将很小的过失认为是很大的失败;有时会对原有爱好暂时失去乐趣，“对许多事情感到无所谓”。你最近可能感到精力有所下降，易感到疲乏或倦怠，工作效率有所影响;近期食欲和睡眠情况不佳，体重较以前可能会略有下降;有时对自身价值有负面的评价，想到过去的微小失败，偶尔会夸大自己对不幸事件的责任。", "无",
                        "无", "无", "你表现出了轻微的抑郁状态。尽管现在这种状态并不完美，但是只要稍加努力，你可以消除出现的这些症状，回到最佳状态。可以尝试用下面的方式来解决:首先，改变自己的行为。这包括:把复杂问题分解成简单问题;计划一些积极有益的活动以改善枯燥的生活;提高活动水平，培养和发展积极的兴趣爱好;了 解自己的极限，不过于追求完美;提倡健康饮食方式、适量运动、少喝酒、主动解决睡眠障碍等。其次，不过分关注症状，分散注意力，--旦发现自己的抑郁观念，运用理性的思维去应对抑郁观念“我的观念是否有足够的证据支持?”，“我是否付出了足够的努力去改变?”，适当的暗示自己“抑郁是很平常的事情，是每个人都可能有的情绪体验，没必要过分强调”等，逐渐消除自身的抑郁表现。", "是"));
            } else if (score >= 60 && score <= 69) {
                newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "中度抑郁倾向", "你最近时常出现心境低落现象，如经常感到压抑、抑郁、悲伤、失望、沮丧或忧伤，可能对很多看不顺眼的事情发脾气或责备他人，或者将很小的过失看作是很大的失败;最近感到兴趣或乐趣的丧失，觉得原有的爱好也失去乐趣，“对任何事情都无所谓”。睡眠也成为经常困扰你的问题之一，最常见的是失眠，你经常会从睡眠中醒来或早.上很早就醒来，并且难以再入睡。你会对自己做出负面评价，将一些琐碎的日常小失误作为失败的证据，夸大自己对不幸事件的责任;感到思维、集中注意或作决定的能力降低;有时会想到死，有自杀的念头，但多数情况下只是想想而已，不会付诸实施。", "无",
                        "无", "无", "在能够控制的范围内，你可以学习接触一些心理健康知识应对这些症状，帮助自己改变行为和观念上的失误，如:在需要的时候寻求外界帮助，不要默默承受;凡事循序渐进，将大事分割成小块，一次只做一件;多参加有益的活动;抑郁时，记录和澄清自身的感受和观念，努力识别那些典型的抑郁观念(例如，全或无思维、忽视生活中的积极方面、以偏盖全等)，特别要注意评价自己的方式是否积极，对挫折与失败做好充分的心理准备;注意找出引发自身情绪抑郁的相关主题(例如，过分寻求赞同、羞耻、不幸福的人际关系、不现实的理想、完美主义)，找到后使用理性思维方式向它们提出挑战;然后建立新的观念和行为模式。你越是认同自己、接纳自己，就越可能从病症中恢复。如果你认为自己无法做出努力来改变这种状态，也可以向专业的心理师求助。在这个过程中要相信去看心理师并不是无能的表现，自己的状态在那里是可以得到帮助的。 ", "是"));
            } else if (score >= 70 && score <= 80) {
                newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "严重抑郁", "你总感到心境低落, 总处于压抑、抑郁、悲伤、失望、沮丧或忧伤的情绪状态之中。你的情绪很容易激 动,总是对很多看不顺眼的事情发脾气", "无",
                        "无", "无", "你的抑郁情况非常严重，希望你可以及时就医，寻求专业人士的帮助，必要时配合药物治疗。", "是"));
            }
            resultMap0.put("ZungDP总分", String.valueOf(score));
            resultJson.put("ZungDP总分", String.valueOf(score));

            resultMapList.add(resultMap0);
        }


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

        JSONObject returnJson = new JSONObject(true);
        returnJson.put("resultMapList", resultMapList);
        //returnJson.put("scaleName",resultJson.getString("scaleName"));
        returnJson.put("resultJson", resultJson);
        returnJson.put(ScaleConstant.ResultEnum.RESULT_NEW_FIELD.getKeyword(), newResult);

        return returnJson;
    }
}
