package com.ym.mec.biz.service.impl;

import com.ym.mec.biz.dal.dao.MusicGroupQuestionnaireDao;
import com.ym.mec.biz.dal.dao.QuestionnaireUserResultDao;
import com.ym.mec.biz.dal.dao.SysConfigDao;
import com.ym.mec.biz.dal.dao.SysTenantConfigDao;
import com.ym.mec.biz.dal.dto.QuestionnaireResultDto;
import com.ym.mec.biz.dal.entity.MusicGroupQuestionnaire;
import com.ym.mec.biz.dal.entity.QuestionnaireTopic;
import com.ym.mec.biz.dal.entity.QuestionnaireUserResult;
import com.ym.mec.biz.dal.enums.QuestionnaireActiveTypeEnum;
import com.ym.mec.biz.service.MusicGroupQuestionnaireService;
import com.ym.mec.biz.service.QuestionnaireTopicService;
import com.ym.mec.biz.service.SysConfigService;
import com.ym.mec.common.dal.BaseDAO;
import com.ym.mec.common.exception.BizException;
import com.ym.mec.common.service.impl.BaseServiceImpl;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Service
public class MusicGroupQuestionnaireServiceImpl extends BaseServiceImpl<Integer, MusicGroupQuestionnaire>  implements MusicGroupQuestionnaireService {
	
	@Autowired
	private MusicGroupQuestionnaireDao musicGroupQuestionnaireDao;
	@Autowired
	private SysConfigDao sysConfigDao;
	@Autowired
	private QuestionnaireTopicService questionnaireTopicService;
	@Autowired
	private QuestionnaireUserResultDao questionnaireUserResultDao;

	@Override
	public BaseDAO<Integer, MusicGroupQuestionnaire> getDAO() {
		return musicGroupQuestionnaireDao;
	}

    @Override
	@Transactional(rollbackFor = Exception.class)
    public void add(MusicGroupQuestionnaire musicGroupQuestionnaire) {
		musicGroupQuestionnaireDao.insert(musicGroupQuestionnaire);
		//保存问卷结果
		List<QuestionnaireUserResult> questionnaireUserResultList = musicGroupQuestionnaire.getQuestionnaireUserResultList();
		if(questionnaireUserResultList == null || questionnaireUserResultList.size() == 0){
			throw new BizException("请录入问卷结果");
		}
		for (QuestionnaireUserResult result : questionnaireUserResultList) {
			result.setActiveId(musicGroupQuestionnaire.getId());
			result.setActiveType(QuestionnaireActiveTypeEnum.MUSIC_GROUP_QUESTION);
		}
		questionnaireUserResultDao.batchInsert1(questionnaireUserResultList);
	}

	@Override
	public QuestionnaireTopic getQuestionDetail(Integer tenantId) {
		String topicId = sysConfigDao.findConfigValue(SysConfigService.MUSIC_GROUP_TOPIC_ID);
		if(StringUtils.isEmpty(topicId)){
			throw new BizException("操作失败：请选择问卷调查模板");
		}
		return questionnaireTopicService.getDetail(Integer.parseInt(topicId));
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void updateResult(MusicGroupQuestionnaire musicGroupQuestionnaire) {
		MusicGroupQuestionnaire questionnaire = musicGroupQuestionnaireDao.get(musicGroupQuestionnaire.getId());
		if(questionnaire == null){
			throw new BizException("修改失败：问卷不存在");
		}
		musicGroupQuestionnaireDao.update(questionnaire);
		//保存问卷结果
		List<QuestionnaireUserResult> questionnaireUserResultList = musicGroupQuestionnaire.getQuestionnaireUserResultList();
		if(questionnaireUserResultList == null || questionnaireUserResultList.size() == 0){
			throw new BizException("请录入问卷结果");
		}
		for (QuestionnaireUserResult result : questionnaireUserResultList) {
			result.setActiveId(musicGroupQuestionnaire.getId());
			result.setActiveType(QuestionnaireActiveTypeEnum.MUSIC_GROUP_QUESTION);
		}
		//删除原来的问卷结果
		HashMap<String, Object> paramMap = new HashMap<>(4);
		paramMap.put("activeId",musicGroupQuestionnaire.getId());
		paramMap.put("activeType",QuestionnaireActiveTypeEnum.MUSIC_GROUP_QUESTION);
		questionnaireUserResultDao.delByActiveIdAndUserId(paramMap);
		questionnaireUserResultDao.batchInsert1(questionnaireUserResultList);
	}

	@Override
	public Map<String,Object> getDetail(Integer id) {
		Map<String,Object> resultMap = new HashMap<>(2);
		MusicGroupQuestionnaire musicGroupQuestionnaire = musicGroupQuestionnaireDao.get(id);
		resultMap.put("musicGroupQuestionnaire",musicGroupQuestionnaire);
		//获取问卷结果
		List<QuestionnaireResultDto> questionnaireResultDtos = questionnaireUserResultDao.getQuestionResult(musicGroupQuestionnaire.getId(),"MUSIC_GROUP_QUESTION");
		resultMap.put("questionResult",questionnaireResultDtos);
		return resultMap;
	}

	@Override
	@Transactional(rollbackFor = Exception.class)
	public void del(Integer id) {
		HashMap<String, Object> paramMap = new HashMap<>(4);
		paramMap.put("activeId",id);
		paramMap.put("activeType",QuestionnaireActiveTypeEnum.MUSIC_GROUP_QUESTION);
		questionnaireUserResultDao.delByActiveIdAndUserId(paramMap);
		musicGroupQuestionnaireDao.delete(id);
	}
}