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.scale.scaleresult.ScaleConstant;
import com.rf.psychological.utils.Constant;

import java.text.DecimalFormat;
import java.util.*;

/**
 * @author lpf
 * @description:霍兰德职业兴趣测试
 * @date 2021/3/10 17:17
 */
public class HLDScale extends BaseScale {

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

    public JSONObject scaleCalculate() throws Exception {
        //总得分
        int score = 0;

        int score1 = 0;
        int score2 = 0;
        int score3 = 0;
        int score4 = 0;
        int score5 = 0;
        int score6 = 0;


        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            if (jsonObject1.getString("scoreDirection").equals("1")) {
                if ((i + 1) == 1 || (i + 1) == 7 || (i + 1) == 13 || (i + 1) == 19 || (i + 1) == 25 || (i + 1) == 31 || (i + 1) == 37 || (i + 1) == 43 || (i + 1) == 49 || (i + 1) == 55 || (i + 1) == 61 || (i + 1) == 67 || (i + 1) == 73 || (i + 1) == 79 || (i + 1) == 85) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score1 += 1;
                    }
                } else if ((i + 1) == 2 || (i + 1) == 8 || (i + 1) == 14 || (i + 1) == 20 || (i + 1) == 26 || (i + 1) == 32 || (i + 1) == 38 || (i + 1) == 44 || (i + 1) == 50 || (i + 1) == 56 || (i + 1) == 62 || (i + 1) == 68 || (i + 1) == 74 || (i + 1) == 80 || (i + 1) == 86) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score2 += 1;
                    }
                } else if ((i + 1) == 3 || (i + 1) == 9 || (i + 1) == 15 || (i + 1) == 21 || (i + 1) == 27 || (i + 1) == 33 || (i + 1) == 39 || (i + 1) == 45 || (i + 1) == 51 || (i + 1) == 57 || (i + 1) == 63 || (i + 1) == 69 || (i + 1) == 75 || (i + 1) == 81 || (i + 1) == 87) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score3 += 1;
                    }
                } else if ((i + 1) == 4 || (i + 1) == 10 || (i + 1) == 16 || (i + 1) == 22 || (i + 1) == 28 || (i + 1) == 34 || (i + 1) == 40 || (i + 1) == 46 || (i + 1) == 52 || (i + 1) == 58 || (i + 1) == 64 || (i + 1) == 70 || (i + 1) == 76 || (i + 1) == 82 || (i + 1) == 88) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score4 += 1;
                    }
                } else if ((i + 1) == 5 || (i + 1) == 11 || (i + 1) == 17 || (i + 1) == 23 || (i + 1) == 29 || (i + 1) == 35 || (i + 1) == 41 || (i + 1) == 47 || (i + 1) == 53 || (i + 1) == 59 || (i + 1) == 65 || (i + 1) == 71 || (i + 1) == 77 || (i + 1) == 83 || (i + 1) == 89) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score5 += 1;
                    }
                } else if ((i + 1) == 6 || (i + 1) == 12 || (i + 1) == 18 || (i + 1) == 24 || (i + 1) == 30 || (i + 1) == 36 || (i + 1) == 42 || (i + 1) == 48 || (i + 1) == 54 || (i + 1) == 60 || (i + 1) == 66 || (i + 1) == 72 || (i + 1) == 78 || (i + 1) == 84 || (i + 1) == 90) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score6 += 1;
                    }
                }
            }
        }

        //得分列表
        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("现实型", String.valueOf(score1));
        resultMap.put("研究型", String.valueOf(score2));
        resultMap.put("艺术型", String.valueOf(score3));
        resultMap.put("社会型", String.valueOf(score4));
        resultMap.put("企业型", String.valueOf(score5));
        resultMap.put("常规型", String.valueOf(score6));
        resultJson.put("现实型", String.valueOf(score1));
        resultJson.put("研究型", String.valueOf(score2));
        resultJson.put("艺术型", String.valueOf(score3));
        resultJson.put("社会型", String.valueOf(score4));
        resultJson.put("企业型", String.valueOf(score5));
        resultJson.put("常规型", String.valueOf(score6));
        Map<String,Double> dimensionScoreMap = new HashMap<>();
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369292d89", (double) score1);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369332d8a", (double) score2);
        dimensionScoreMap.put("ff8080817e7a8529017f0a83693c2d8b", (double) score3);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369452d8c", (double) score4);
        dimensionScoreMap.put("ff8080817e7a8529017f0a83694d2d8d", (double) score5);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369562d8e", (double) score6);
        resultJson.put("dimensionScoreMap",dimensionScoreMap);
        int[] ints = {score1, score2, score3, score4, score5, score6};
        Arrays.sort(ints);
        if (score1 == ints[ints.length - 1]) {
            resultMap.put("结论", "【现实型】喜欢现实性的实在的工作，如机械维修、木匠活、烹饪、电气技术、管子工、电工、机械工、摄影师、制图员等，也称“体能取向”、“机械取向”。这类人通常具有机械技能和体力，喜欢户外工作，乐于使用各种工具和机器设备。这种人喜欢同事务而不是人打交道的工作。他们真诚、谦逊、敏感、务实、朴素、节俭、腼腆。");
            resultJson.put("结论", "【现实型】喜欢现实性的实在的工作，如机械维修、木匠活、烹饪、电气技术、管子工、电工、机械工、摄影师、制图员等，也称“体能取向”、“机械取向”。这类人通常具有机械技能和体力，喜欢户外工作，乐于使用各种工具和机器设备。这种人喜欢同事务而不是人打交道的工作。他们真诚、谦逊、敏感、务实、朴素、节俭、腼腆。");
        } else if (score2 == ints[ints.length - 1]) {
            resultMap.put("结论", "【研究型】喜欢各种研究型工作，如：实验室研究员、医师、产品检验员、数学、物理学、化学、生物学等自然科学研究者、图书馆技师、计算机程序编制者和电子技术工作者等等。这类人通常具有较高的数学和科研能力，喜欢独立工作，喜欢解决问题；喜欢同观念而不是人或事务打交道。他们逻辑性强、好奇、聪明、仔细、独立、安详、俭朴。");
            resultJson.put("结论", "【研究型】喜欢各种研究型工作，如：实验室研究员、医师、产品检验员、数学、物理学、化学、生物学等自然科学研究者、图书馆技师、计算机程序编制者和电子技术工作者等等。这类人通常具有较高的数学和科研能力，喜欢独立工作，喜欢解决问题；喜欢同观念而不是人或事务打交道。他们逻辑性强、好奇、聪明、仔细、独立、安详、俭朴。");
        } else if (score3 == ints[ints.length - 1]) {
            resultMap.put("结论", "【艺术型】喜欢艺术性的工作，如：音乐、舞蹈、唱歌、演员、艺术家、美术家、音乐家、设计师、编辑、作家和文艺评论家等。这种取向类型的人往往具有某些艺术上的技能，喜欢创造性的工作，富于想象力。这类人通常喜欢同观念而不是事务打交道的工作。他们较开放、好想象、独立、有创造性。");
            resultJson.put("结论", "【艺术型】喜欢艺术性的工作，如：音乐、舞蹈、唱歌、演员、艺术家、美术家、音乐家、设计师、编辑、作家和文艺评论家等。这种取向类型的人往往具有某些艺术上的技能，喜欢创造性的工作，富于想象力。这类人通常喜欢同观念而不是事务打交道的工作。他们较开放、好想象、独立、有创造性。");
        } else if (score4 == ints[ints.length - 1]) {
            resultMap.put("结论", "【社会型】喜欢社会交往性工作，如教师、教育行政人员、社会学家、社会工作者、咨询顾问、护士等。这类人通常喜欢周围有别人存在，对别人的事很有兴趣，乐于帮助别人解决难题。这种人喜欢与人而不是事务打交道的工作。他们助人为乐、有责任心、热情、善于合作、富于理想、友好、善良、慷慨、耐心。");
            resultJson.put("结论", "【社会型】喜欢社会交往性工作，如教师、教育行政人员、社会学家、社会工作者、咨询顾问、护士等。这类人通常喜欢周围有别人存在，对别人的事很有兴趣，乐于帮助别人解决难题。这种人喜欢与人而不是事务打交道的工作。他们助人为乐、有责任心、热情、善于合作、富于理想、友好、善良、慷慨、耐心。");
        } else if (score5 == ints[ints.length - 1]) {
            resultMap.put("结论", "【企业型】喜欢诸如推销、服务、管理、企事业领导、经理、商业主任、销售员和人寿保险员等。这类人通常具有领导才能和口才，对金钱和权利感兴趣，喜欢影响、控制别人。这种人喜欢同人和观念而不是事务打交道的工作。他们爱户外交际、冒险、精力充沛、乐观、和蔼、细心、抱负心强。");
            resultJson.put("结论", "【企业型】喜欢诸如推销、服务、管理、企事业领导、经理、商业主任、销售员和人寿保险员等。这类人通常具有领导才能和口才，对金钱和权利感兴趣，喜欢影响、控制别人。这种人喜欢同人和观念而不是事务打交道的工作。他们爱户外交际、冒险、精力充沛、乐观、和蔼、细心、抱负心强。");
        } else if (score6 == ints[ints.length - 1]) {
            resultMap.put("结论", "【常规型】喜欢常规性的工作，如：记账、秘书、办事员，以及测算办公室人员、接待员、文件档案管理员、秘书、打字员、会计、出纳员等工作。这种人有很好的数字和计算能力，喜欢室内工作，乐于整理、安排事务。他们往往喜欢同文字、数字打交道的工作，比较顺从、务实、细心、节俭、做事利索、很有条理性、有耐性。");
            resultJson.put("结论", "【常规型】喜欢常规性的工作，如：记账、秘书、办事员，以及测算办公室人员、接待员、文件档案管理员、秘书、打字员、会计、出纳员等工作。这种人有很好的数字和计算能力，喜欢室内工作，乐于整理、安排事务。他们往往喜欢同文字、数字打交道的工作，比较顺从、务实、细心、节俭、做事利索、很有条理性、有耐性。");
        }

        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_HLD);
        returnJson.put("resultJson", resultJson);

        return returnJson;
    }

    public JSONObject scaleCalculateV2() throws Exception {

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

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

        //总得分
        int score = 0;

        int score1 = 0;
        int score2 = 0;
        int score3 = 0;
        int score4 = 0;
        int score5 = 0;
        int score6 = 0;


        for (int i = 0; i < jsonArray.size(); i++) {
            JSONObject jsonObject1 = jsonArray.getJSONObject(i);
            if (jsonObject1.getString("scoreDirection").equals("1")) {
                if ((i + 1) == 1 || (i + 1) == 7 || (i + 1) == 13 || (i + 1) == 19 || (i + 1) == 25 || (i + 1) == 31 || (i + 1) == 37 || (i + 1) == 43 || (i + 1) == 49 || (i + 1) == 55 || (i + 1) == 61 || (i + 1) == 67 || (i + 1) == 73 || (i + 1) == 79 || (i + 1) == 85) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score1 += 1;
                    }
                } else if ((i + 1) == 2 || (i + 1) == 8 || (i + 1) == 14 || (i + 1) == 20 || (i + 1) == 26 || (i + 1) == 32 || (i + 1) == 38 || (i + 1) == 44 || (i + 1) == 50 || (i + 1) == 56 || (i + 1) == 62 || (i + 1) == 68 || (i + 1) == 74 || (i + 1) == 80 || (i + 1) == 86) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score2 += 1;
                    }
                } else if ((i + 1) == 3 || (i + 1) == 9 || (i + 1) == 15 || (i + 1) == 21 || (i + 1) == 27 || (i + 1) == 33 || (i + 1) == 39 || (i + 1) == 45 || (i + 1) == 51 || (i + 1) == 57 || (i + 1) == 63 || (i + 1) == 69 || (i + 1) == 75 || (i + 1) == 81 || (i + 1) == 87) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score3 += 1;
                    }
                } else if ((i + 1) == 4 || (i + 1) == 10 || (i + 1) == 16 || (i + 1) == 22 || (i + 1) == 28 || (i + 1) == 34 || (i + 1) == 40 || (i + 1) == 46 || (i + 1) == 52 || (i + 1) == 58 || (i + 1) == 64 || (i + 1) == 70 || (i + 1) == 76 || (i + 1) == 82 || (i + 1) == 88) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score4 += 1;
                    }
                } else if ((i + 1) == 5 || (i + 1) == 11 || (i + 1) == 17 || (i + 1) == 23 || (i + 1) == 29 || (i + 1) == 35 || (i + 1) == 41 || (i + 1) == 47 || (i + 1) == 53 || (i + 1) == 59 || (i + 1) == 65 || (i + 1) == 71 || (i + 1) == 77 || (i + 1) == 83 || (i + 1) == 89) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score5 += 1;
                    }
                } else if ((i + 1) == 6 || (i + 1) == 12 || (i + 1) == 18 || (i + 1) == 24 || (i + 1) == 30 || (i + 1) == 36 || (i + 1) == 42 || (i + 1) == 48 || (i + 1) == 54 || (i + 1) == 60 || (i + 1) == 66 || (i + 1) == 72 || (i + 1) == 78 || (i + 1) == 84 || (i + 1) == 90) {
                    if (jsonObject1.getString("checkItems").equals("是")) {
                        score6 += 1;
                    }
                }
            }
        }

        //得分列表
        Map<String, String> resultMap = new LinkedHashMap<>();
        resultMap.put("现实型", String.valueOf(score1));
        resultMap.put("研究型", String.valueOf(score2));
        resultMap.put("艺术型", String.valueOf(score3));
        resultMap.put("社会型", String.valueOf(score4));
        resultMap.put("企业型", String.valueOf(score5));
        resultMap.put("常规型", String.valueOf(score6));
        resultJson.put("现实型", String.valueOf(score1));
        resultJson.put("研究型", String.valueOf(score2));
        resultJson.put("艺术型", String.valueOf(score3));
        resultJson.put("社会型", String.valueOf(score4));
        resultJson.put("企业型", String.valueOf(score5));
        resultJson.put("常规型", String.valueOf(score6));
        Map<String,Double> dimensionScoreMap = new HashMap<>();
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369292d89", (double) score1);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369332d8a", (double) score2);
        dimensionScoreMap.put("ff8080817e7a8529017f0a83693c2d8b", (double) score3);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369452d8c", (double) score4);
        dimensionScoreMap.put("ff8080817e7a8529017f0a83694d2d8d", (double) score5);
        dimensionScoreMap.put("ff8080817e7a8529017f0a8369562d8e", (double) score6);
        resultJson.put("dimensionScoreMap",dimensionScoreMap);
        //总分
        score = score1 + score2 + score3 + score4 + score5 + score6;
        newResultDtos.add(new NewResultDto("总分", String.valueOf(score), "", "", "无",
                "无", "无", "无", "否"));

        int[] ints = {score1, score2, score3, score4, score5, score6};
        Arrays.sort(ints);
        if (score1 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("现实型", String.valueOf(score1), "", "喜欢现实性的实在的工作，如机械维修、木匠活、烹饪、电气技术、管子工、电工、机械工、摄影师、制图员等，也称“体能取向”、“机械取向”。这类人通常具有机械技能和体力，喜欢户外工作，乐于使用各种工具和机器设备。这种人喜欢同事务而不是人打交道的工作。他们真诚、谦逊、敏感、务实、朴素、节俭、腼腆。", "无",
                    "无", "无", "无", "否"));
        }
        if (score2 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("研究型", String.valueOf(score2), "", "喜欢各种研究型工作，如：实验室研究员、医师、产品检验员、数学、物理学、化学、生物学等自然科学研究者、图书馆技师、计算机程序编制者和电子技术工作者等等。这类人通常具有较高的数学和科研能力，喜欢独立工作，喜欢解决问题；喜欢同观念而不是人或事务打交道。他们逻辑性强、好奇、聪明、仔细、独立、安详、俭朴。", "无",
                    "无", "无", "无", "否"));
        }
        if (score3 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("艺术型", String.valueOf(score3), "", "喜欢艺术性的工作，如：音乐、舞蹈、唱歌、演员、艺术家、美术家、音乐家、设计师、编辑、作家和文艺评论家等。这种取向类型的人往往具有某些艺术上的技能，喜欢创造性的工作，富于想象力。这类人通常喜欢同观念而不是事务打交道的工作。他们较开放、好想象、独立、有创造性。", "无",
                    "无", "无", "无", "否"));
        }
        if (score4 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("社会型", String.valueOf(score4), "", "喜欢社会交往性工作，如教师、教育行政人员、社会学家、社会工作者、咨询顾问、护士等。这类人通常喜欢周围有别人存在，对别人的事很有兴趣，乐于帮助别人解决难题。这种人喜欢与人而不是事务打交道的工作。他们助人为乐、有责任心、热情、善于合作、富于理想、友好、善良、慷慨、耐心。", "无",
                    "无", "无", "无", "否"));
        }
        if (score5 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("企业型", String.valueOf(score5), "", "喜欢诸如推销、服务、管理、企事业领导、经理、商业主任、销售员和人寿保险员等。这类人通常具有领导才能和口才，对金钱和权利感兴趣，喜欢影响、控制别人。这种人喜欢同人和观念而不是事务打交道的工作。他们爱户外交际、冒险、精力充沛、乐观、和蔼、细心、抱负心强。", "无",
                    "无", "无", "无", "否"));
        }
        if (score6 == ints[ints.length - 1]) {
            newResultDtos.add(new NewResultDto("常规型", String.valueOf(score6), "", "喜欢常规性的工作，如：记账、秘书、办事员，以及测算办公室人员、接待员、文件档案管理员、秘书、打字员、会计、出纳员等工作。这种人有很好的数字和计算能力，喜欢室内工作，乐于整理、安排事务。他们往往喜欢同文字、数字打交道的工作，比较顺从、务实、细心、节俭、做事利索、很有条理性、有耐性。", "无",
                    "无", "无", "无", "否"));
        }


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

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

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

        return returnJson;
    }
}
