package cn.com.countrygarden.bi.main.service.review.commonService;

import java.util.ArrayList;
import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import cn.com.countrygarden.bi.main.dao.review.ReviewQuestionnaireProblemClassificationMapper;
import cn.com.countrygarden.bi.main.dao.review.ReviewQuestionnaireProblemMapper;
import cn.com.countrygarden.bi.main.model.review.ReviewQuestionnaireProblemClassification;

@Component
public class ClassificationVoService {
	@Autowired
	private ReviewQuestionnaireProblemClassificationMapper reviewQuestionnaireProblemClassificationMapper;

	@Autowired
	private ReviewQuestionnaireProblemMapper reviewQuestionnaireProblemMapper;

	/**
	 * 根据问卷id得到可以更改状态的ClassificationId集合
	 * 
	 * @param questionnaireId
	 * 
	 */
	public List<Integer> ClassificationFlagYesEdit(Integer questionnaireId) {

		List<Integer> classificationIds = reviewQuestionnaireProblemClassificationMapper
				.findProblemClassificationIds(questionnaireId);
		// 2。查询除当前问卷与没有被删除的问卷中的问题分类id,返回的ClassificationId为已经被使用的id值
		// 存放可以更改状态的ClassificationId
		List<Integer> classificationEditIds = new ArrayList<Integer>();

		if (classificationIds.size() > 0) {
			List<Integer> problemClassificationIds = reviewQuestionnaireProblemMapper
					.selectProblemClassificationIds(classificationIds, questionnaireId);

			for (int i = 0; i < classificationIds.size(); i++) {

				if (problemClassificationIds.size() > 0) {
					for (int j = 0; j < problemClassificationIds.size(); j++) {

						if (classificationIds.get(i) == problemClassificationIds.get(j)) {
							break;
							// 两者不相等则没有问卷在使用，问卷分类可以被删除
						} else {
							classificationEditIds.add(classificationIds.get(i));
						}
					}
				} else {
					classificationEditIds.add(classificationIds.get(i));
				}
			}

		}

		return classificationEditIds;

	}

	/**
	 * 根据问卷id查询正在使用的问题分类状态及更改状态
	 * 
	 * @param questionnaireId
	 * 
	 */
	public void ClassificationFlagUpdateService(Integer questionnaireId) {
		// 处理问题分类的状态
		// 当删除问卷时，除自身使用外，如果问卷分类还有被其他问卷使用则flag状态为0，不可更改
		// 当删除问卷时，除自身使用外，如果问卷分类没有被其他问卷使用问卷flag状态为1，可更改

		// 1.根据当前问卷id查询出所有的问题分类id(排除问题分类中flag=2默认的数据)
		List<Integer> classificationIds = reviewQuestionnaireProblemClassificationMapper
				.findProblemClassificationIds(questionnaireId);
		// 2。查询除当前问卷与没有被删除的问卷中的问题分类id,返回的ClassificationId为已经被使用的id值

		if (classificationIds.size() > 0) {
			List<Integer> problemClassificationIds = reviewQuestionnaireProblemMapper
					.selectProblemClassificationIds(classificationIds, questionnaireId);

			ReviewQuestionnaireProblemClassification classification = null;
			// 3。匹配两个查询出的问题分类id，如没有被使用则改变问题分类状态

			for (int i = 0; i < classificationIds.size(); i++) {
				classification = new ReviewQuestionnaireProblemClassification();
				classification.setId(classificationIds.get(i));

				if (problemClassificationIds.size() > 0) {
					for (int j = 0; j < problemClassificationIds.size(); j++) {
						// 两者相等则有问卷在使用，不能更改
						if (classificationIds.get(i) == problemClassificationIds.get(j)) {
							classification.setFlag(0);
							break;
							// 两者不相等则没有问卷在使用，问卷分类可以被删除,更改问题分类状态为1
						} else {
							classification.setFlag(1);
						}
					}
				} else {
					classification.setFlag(1);
				}
				reviewQuestionnaireProblemClassificationMapper.updateByPrimaryKeySelective(classification);
			}

		}

	}

	/**
	 * 编辑与添加问卷时更改问卷状态为不可删除
	 * 
	 * @param classificationIds
	 */
	public void ClassificationFlag(List<Integer> classificationIds) {

		if (classificationIds.size() > 0) {

			List<Integer> classificationIdsFlagTwo = reviewQuestionnaireProblemClassificationMapper
					.findClassificationFlagTwo();

			ReviewQuestionnaireProblemClassification classification = null;

			// 3。匹配两个查询出的问题分类id，如问题分类的flag不为2则更改状态为0；

			for (int i = 0; i < classificationIds.size(); i++) {
				classification = new ReviewQuestionnaireProblemClassification();
				classification.setId(classificationIds.get(i));

				if (classificationIdsFlagTwo.size() > 0) {
					for (int j = 0; j < classificationIdsFlagTwo.size(); j++) {
						// 两者相等则问题分类Flag=2不更改flag状态
						if (classificationIds.get(i) == classificationIdsFlagTwo.get(j)) {
							classification.setFlag(2);
							break;
							// 两者不相等则问题分类状态更改为0，不能删除状态
						} else {
							classification.setFlag(0);
						}
					}
				} else {
					classification.setFlag(0);
				}
				reviewQuestionnaireProblemClassificationMapper.updateByPrimaryKeySelective(classification);
			}

		}

	}

}
