package com.pcloud.book.pcloudkeyword.biz.impl;

import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.pcloudkeyword.biz.PcloudRobotClassifyBiz;
import com.pcloud.book.pcloudkeyword.dao.PcloudClassifyTemplateDao;
import com.pcloud.book.pcloudkeyword.dao.PcloudRobotClassifyDao;
import com.pcloud.book.pcloudkeyword.dao.PcloudRobotWelcomeDao;
import com.pcloud.book.pcloudkeyword.dto.ClassifyWelcomeDTO;
import com.pcloud.book.pcloudkeyword.entity.PcloudClassifyTemplate;
import com.pcloud.book.pcloudkeyword.entity.PcloudRobotClassify;
import com.pcloud.book.pcloudkeyword.entity.PcloudRobotWelcome;
import com.pcloud.book.pcloudkeyword.facade.response.PcloudRobotClassifyResponseVO;
import com.pcloud.book.pcloudkeyword.set.PcloudRobotSet;
import com.pcloud.book.pcloudkeyword.vo.ClassifySeqNumUpdateVO;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.QrcodeUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.facade.wechat.service.QrcodeService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;

@Service
public class PcloudRobotClassifyBizImpl implements PcloudRobotClassifyBiz {

    @Resource
    private PcloudRobotClassifyDao pcloudRobotClassifyDao;
    @Value("${wechat.group.link.prefix}")
    private String wechatLinkPrefix;
    @Resource
    private PcloudRobotWelcomeDao pcloudRobotWelcomeDao;
    @Autowired
    private PcloudRobotSet pcloudRobotSet;
    @Autowired
    private PcloudClassifyTemplateDao pcloudClassifyTemplateDao;
    @Autowired
    private QrcodeService qrcodeService;

    @Override
    public List<PcloudRobotClassifyResponseVO> listAllRobotClassify() {
        return pcloudRobotClassifyDao.listAllRobotClassify();
    }

    @Override
    @Transactional(rollbackFor = {Exception.class})
    public void saveRobotClassify(String classifyName) {
        PcloudRobotClassify classify = new PcloudRobotClassify();
        classify.setClassifyName(classifyName);
        classify.setIsDelete(0);
        pcloudRobotClassifyDao.insert(classify);
        String linkUrl = wechatLinkPrefix + "/group/info?classify_id=" + classify.getId();
        String codeUrl = QrcodeUtils.create( UrlUtils.getShortUrl4Own(linkUrl));
        String url = ResponseHandleUtil.parseResponse(qrcodeService.create4MiniApp(777L, String.valueOf(classify.getId()), null, null), String.class);
        if (null != url) {
            pcloudRobotClassifyDao.updateMiniAppQr(classify.getId(), url);
        }
        classify.setLinkUrl(linkUrl);
        classify.setQrcodeUrl(codeUrl);
        classify.setSeqNum(classify.getId().intValue());
        pcloudRobotClassifyDao.update(classify);
        //新增默认模板
        PcloudClassifyTemplate classifyTemplate = new PcloudClassifyTemplate();
        classifyTemplate.setClassifyId(classify.getId().intValue());
        classifyTemplate.setTemplateCode("common_template");
        pcloudClassifyTemplateDao.insert(classifyTemplate);

    }

    @Override
    public void updateRobotClassify(PcloudRobotClassify classify) {
        pcloudRobotClassifyDao.update(classify);
    }

    @Override
    public PcloudRobotClassify getClassifyById(Long id) {
        return pcloudRobotClassifyDao.getById(id);
    }

    @Override
    public PageBeanNew<PcloudRobotClassifyResponseVO> listClassifyByPage(Integer currentPage, Integer numPerPage) {
        return pcloudRobotClassifyDao.listPageNew(new PageParam(currentPage, numPerPage), new HashMap<>(),"listClassifyByPage");
    }

    @Override
    public ClassifyWelcomeDTO getClassifyWelcome(Long classifyId) {
        ClassifyWelcomeDTO classifyWelcomeDTO = new ClassifyWelcomeDTO();
        PcloudRobotClassify robotClassify = pcloudRobotClassifyDao.getById(classifyId);
        classifyWelcomeDTO.setIsOpenPushH5url(robotClassify.getIsOpenPushH5url());
        classifyWelcomeDTO.setWelcomeDuration(robotClassify.getWelcomeDuration());
        List<PcloudRobotWelcome> pcloudRobotWelcomeList = pcloudRobotWelcomeDao.getRobotWelcomeListByPcloudClassifyId(classifyId);
        pcloudRobotSet.fillRobotWelcome(pcloudRobotWelcomeList);
        classifyWelcomeDTO.setPcloudRobotWelcomeList(pcloudRobotWelcomeList);
        return classifyWelcomeDTO;
    }

    @Override
    public void updateClassifyWelcome(ClassifyWelcomeDTO classifyWelcomeDTO) {
        pcloudRobotClassifyDao.updateWelcomeDuration(classifyWelcomeDTO.getPcloudClassifyId(), classifyWelcomeDTO.getWelcomeDuration(),classifyWelcomeDTO.getIsOpenPushH5url());
        List<PcloudRobotWelcome> robotWelcomeList = classifyWelcomeDTO.getPcloudRobotWelcomeList();
        pcloudRobotWelcomeDao.deleteByPcloudClassifyId(classifyWelcomeDTO.getPcloudClassifyId());
        if (ListUtils.isEmpty(robotWelcomeList)) {
            return;
        }
        pcloudRobotWelcomeDao.batchInsert(robotWelcomeList);
    }

    @Transactional(rollbackFor = Exception.class)
    @Override
    public void updateRobotClassifyKeywordClassify(PcloudRobotClassify classify) {
        if (classify==null||classify.getId()==null||classify.getKeywordClassifyId()==null){
            throw new BookBizException(BookBizException.PARAM_IS_NULL,"参数为空！");
        }
        pcloudRobotClassifyDao.updateRobotClassifyKeywordClassify(classify.getId(),classify.getKeywordClassifyId());
    }

    @Override
    @Transactional(rollbackFor = Exception.class)
    public void updateSeqNum4RobotClassify(ClassifySeqNumUpdateVO vo) {
        pcloudRobotClassifyDao.updateSeqNum4RobotClassify(vo);
    }

}
