//数字数组求和函数
function sum(arr) {
	return arr.reduce(function(prev, curr, idx, arr) {
		return prev + curr;
	});
}

var scorers = {
	//老年人能力评估-日常生活活动
	'MZ/T_039-2013_B1': function(value) {
		//传入总分，返回评估结果对象，包含；分级，分级名称
		// 0 能力完好：总分 100 分
		// 1 轻度受损：总分 65-95 分
		// 2 中度受损：总分 45-60 分
		// 3 重度受损：总分≤40 分 
		var score = parseFloat(sum(value));
		if (score === 100) {
			return {
				level: 0,
				name: '能力完好'
			};
		} else if (score >= 65 && score <= 95) {
			return {
				level: 1,
				name: '轻度受损'
			};
		} else if (score >= 45 && score <= 60) {
			return {
				level: 2,
				name: '中度受损'
			};
		} else if (score <= 40) {
			return {
				level: 3,
				name: '重度受损'
			};
		} else {
			throw new Error('分数不在有效范围内');
		}
	},
	//老年人能力评估-精神状态
	'MZ/T_039-2013_B2': function(value) {
		// 0 能力完好：总分为 0 分
		// 1 轻度受损：总分为 1 分
		// 2 中度受损：总分 2-3 分
		// 3 重度受损：总分 4-6 分
		var score = parseFloat(sum(value));
		if (score === 0) {
			return {
				level: 0,
				name: '能力完好'
			};
		} else if (score === 1) {
			return {
				level: 1,
				name: '轻度受损'
			};
		} else if (score >= 2 && score <= 3) {
			return {
				level: 2,
				name: '中度受损'
			};
		} else if (score >= 4 && score <= 6) {
			return {
				level: 3,
				name: '重度受损'
			};
		} else {
			throw new Error('分数不在有效范围内');
		}
	},
	//老年人能力评估-感知觉与沟通
	'MZ/T_039-2013_B3': function(value) {
		//传入数组（依次是意识，视力，听力，沟通），返回评估结果对象，包含；分级，分级名称
		// 意识：0 清醒，1 嗜睡，2 昏睡 3 昏迷
		// 0 能力完好：意识清醒，且视力和听力评为 0 或 1，沟通评为 0
		// 1 轻度受损：意识清醒，但视力或听力中至少一项评为 2，或沟通评为 1
		// 2 中度受损：意识清醒，但视力或听力中至少一项评为 3，或沟通评为 2； 或嗜睡，视力或听力评定为 3 及以下，沟通评定为 2 及以下
		// 3 重度受损：意识清醒或嗜睡，但视力或听力中至少一项评为 4，或沟通评为 3；或昏睡/昏
		var score = value;
		var consciousness = parseFloat(score[0]);
		var vision = parseFloat(score[1]);
		var hearing = parseFloat(score[2]);
		var communication = parseFloat(score[3]);
		if (consciousness === 0 && vision <= 1 && hearing <= 1 && communication === 0) {
			return {
				level: 0,
				name: '能力完好'
			};
		} else if (consciousness === 0 && (vision === 2 || hearing === 2) || communication === 1) {
			return {
				level: 1,
				name: '轻度受损'
			};
		} else if (consciousness === 0 && (vision === 3 || hearing === 3) || communication === 2 || (
				consciousness === 1 && (vision <= 3 || hearing <= 3) || communication <= 2)) {
			return {
				level: 2,
				name: '中度受损'
			};
		} else if ((consciousness === 0 || consciousness === 1) && (vision === 4 || hearing === 4) ||
			communication === 3 || (consciousness === 2 && (vision <= 4 || hearing <= 4) || communication <= 3)
		) {
			return {
				level: 3,
				name: '重度受损'
			};
		} else {
			throw new Error('分数不在有效范围内');
		}
	},
	//老年人能力评估-社会参与
	'MZ/T_039-2013_B4': function(value) {
		// 0 能力完好：总分 0-2 分
		// 1 轻度受损：总分 3-7 分
		// 2 中度受损：总分 8-13 分
		// 3 重度受损：总分 14-20 分
		var score = parseFloat(sum(value));
		if (score >= 0 && score <= 2) {
			return {
				level: 0,
				name: '能力完好'
			};
		} else if (score >= 3 && score <= 7) {
			return {
				level: 1,
				name: '轻度受损'
			};
		} else if (score >= 8 && score <= 13) {
			return {
				level: 2,
				name: '中度受损'
			};
		} else if (score >= 14 && score <= 20) {
			return {
				level: 3,
				name: '重度受损'
			};
		} else {
			throw new Error('分数不在有效范围内');
		}
	},
	//老年人能力评估
	'MZ/T_039-2013': function(value) {
		var score = value;
		var dailyLife = parseFloat(score[0]);
		var mentalState = parseFloat(score[1]);
		var perceptionCommunication = parseFloat(score[2]);
		var socialParticipation = parseFloat(score[3]);
		if (dailyLife === 0 && mentalState === 0 && perceptionCommunication === 0 && (socialParticipation ===
				0 || socialParticipation === 1)) {
			return {
				level: 0,
				name: '能力完好'
			};
		} else if ((dailyLife === 0 && (mentalState >= 1 || perceptionCommunication >= 1 ||
				socialParticipation === 2)) || (dailyLife === 1 && (mentalState <= 1 &&
				perceptionCommunication <= 1 && socialParticipation <= 1))) {
			return {
				level: 1,
				name: '轻度失能'
			};
		} else if ((dailyLife === 1 && (mentalState === 2 && perceptionCommunication === 2 &&
				socialParticipation === 2 || socialParticipation === 3)) || (dailyLife === 2 && (mentalState <=
				2 && perceptionCommunication <= 2 && socialParticipation <= 2))) {
			return {
				level: 2,
				name: '中度失能'
			};
		} else if (dailyLife === 3 || (dailyLife === 2 && mentalState === 2 && perceptionCommunication === 2 &&
				socialParticipation === 2) || (dailyLife === 2 && (mentalState === 3 ||
				perceptionCommunication === 3 || socialParticipation === 3))) {
			return {
				level: 3,
				name: '重度失能'
			};
		} else {
			throw new Error('输入参数不符合规则，请检查并重新输入');
		}
	}
};

function score(scoreObj) {
	console.log('score', scoreObj);
	let value = scoreObj.value;
	let rule = scoreObj.rule;
	var scorer = scorers[rule];
	if (scorer) {
		return scorer(value);
	} else {
		throw new Error('未找到名为 ' + ruleName + ' 的校验规则');
	}
}

module.exports = score;
//在vue中使用：
// import score from '@/pages/WenJuanDiaoCha/Answer/Score';