package com.huatek.frame.base.service.impl;

import com.alibaba.dubbo.config.annotation.Service;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.huatek.frame.base.dto.DictionnaireDTO;
import com.huatek.frame.base.entity.Dictionnaire;
import com.huatek.frame.base.mapper.DictionnaireDao;
import com.huatek.frame.base.mapper.DictionnaireMapper;
import com.huatek.frame.base.service.DictionnaireService;
import com.huatek.frame.base.util.Constants;
import com.huatek.frame.base.vo.DictionnaireVO;
import com.huatek.torch.frame.tools.ConstantUtil;
import com.huatek.torch.frame.tools.ResultUtil;
import com.huatek.torch.sql.beans.WherePrams;
import com.huatek.torch.sql.where.W;
import com.huatek.torch.util.tools.HuatekTools;
import com.huatek.torch.util.uuid.Uuid;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.ObjectUtils;

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

/**
 * 系统_字典 ServiceImpl
 *
 * @author key_dong
 * @date 2018-7-11 14:03:46
 */
@Component
@Service(interfaceClass = DictionnaireService.class)
@Transactional(rollbackFor = Exception.class)
public class DictionnaireServiceImpl implements DictionnaireService {

	@Autowired
	private DictionnaireMapper dictionnaireMapper;

	@Autowired
	private DictionnaireDao dictionnaireDao;

	@Override
	public Map<String, Object> findDictionnairePage(DictionnaireDTO dto) {
		PageHelper.startPage(dto.getPage(), dto.getLimit());
		dto.setDeleted(Constants.DEFAULT_NO);
		Page<DictionnaireVO> dictionnaires = dictionnaireMapper.selectDictionnairePage(dto);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, dictionnaires.getTotal(), "", dictionnaires.getResult());
	}

	@Override
	public Map<String, Object> addDictionnaire(Dictionnaire entity) {
		List<Dictionnaire> lists = dictionnaireDao.list(new WherePrams().where("name", entity.getName()));
		if (!ObjectUtils.isEmpty(lists)) {
			return ResultUtil.put(ConstantUtil.JWT_CODE_FAIL, "DICTIONNAIRE.NAME.REPETITION", "");
		}
		lists = dictionnaireDao.list(new WherePrams().where("code", entity.getCode()));
		if (!ObjectUtils.isEmpty(lists)) {
			return ResultUtil.put(ConstantUtil.JWT_CODE_FAIL, "DICTIONNAIRE.CODE.REPETITION", "");
		}
		entity.setId(Uuid.getUUID());
		entity.setDeleted(Constants.DEFAULT_NO);
		dictionnaireDao.add(entity);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public Map<String, Object> findDictionnaire(String id) {
		DictionnaireVO vo = new DictionnaireVO();
		if (!HuatekTools.isEmpty(id)) {
			Dictionnaire entity = dictionnaireDao.get(id);
			BeanUtils.copyProperties(entity, vo);
		}
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", vo);
	}

	@Override
	public Map<String, Object> updateDictionnaire(Dictionnaire entity) {
		List<Dictionnaire> lists = dictionnaireDao.list(new WherePrams().where("name", entity.getName()).and("id", W.NE, entity.getId()));
		if (!ObjectUtils.isEmpty(lists)) {
			return ResultUtil.put(ConstantUtil.JWT_CODE_FAIL, "DICTIONNAIRE.NAME.REPETITION", "");
		}
		lists = dictionnaireDao.list(new WherePrams().where("code", entity.getCode()).and("id", W.NE, entity.getId()));
		if (!ObjectUtils.isEmpty(lists)) {
			return ResultUtil.put(ConstantUtil.JWT_CODE_FAIL, "DICTIONNAIRE.CODE.REPETITION", "");
		}
		dictionnaireDao.updateLocal(entity);
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public Map<String, Object> deleteDictionnaire(String[] ids) {
		for (String id : ids) {
			Dictionnaire dic = new Dictionnaire();
			dic.setDeleted(Constants.DEFAULT_YES);
			dic.setId(id);
			dictionnaireDao.updateLocal(dic);
		}
		return ResultUtil.put(ConstantUtil.REQUEST_SUCCESS, "", "");
	}

	@Override
	public int insert(Dictionnaire dictionnaire){
		return dictionnaireDao.add(dictionnaire);
	}

	@Override
	public Dictionnaire initDictionnaire(String key, String title){
		Dictionnaire dictionnaire = dictionnaireMapper.findDictionnaireByKey(key);
		if(dictionnaire == null){
			dictionnaire = new Dictionnaire();
			dictionnaire.setId(Uuid.getUUID());
			dictionnaire.setCode(key);
			dictionnaire.setName(title);
			dictionnaire.setDeleted(Constants.DEFAULT_NO);
			this.insert(dictionnaire);
		}
		return dictionnaire;
	}

}