package com.bcxin.risk.communicate;

import cn.hutool.core.date.DateUtil;
import com.bcxin.risk.common.service.LogService;
import com.bcxin.risk.common.util.WebUtil;
import com.bcxin.risk.common.util.cipher.CipherDESUtil;
import com.bcxin.risk.common.util.cipher.MD5Util;
import com.bcxin.risk.constant.Const;
import com.bcxin.risk.constant.DictConst;
import com.bcxin.risk.sys.SysBasicUtil;
import com.bcxin.risk.user.police.service.PoliceService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;
import org.springframework.web.servlet.ModelAndView;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.util.Map;
import java.util.Objects;

/**
 * 第三方调用PSS的接口调用
 */
@Controller
@RequestMapping("/communicate")
public class CommunicateController {

    private static Logger log = LoggerFactory.getLogger(CommunicateController.class);

    @Autowired
    private PoliceService policeService;

    @Resource
    private LogService logService;


    /**
     * 审批系统审批结果同步
     *
     * @param request
     * @param response
     * @throws Exception
     */
    @RequestMapping("/police/approval")
    public void onlineApproval(HttpServletRequest request, HttpServletResponse response) throws Exception {
        log.debug("审批系统对接");
        Map<String, String> paramMap = WebUtil.getParameterMap(request);
        String token = paramMap.get("token");
        String approvalJson = paramMap.get("approval");
        String transSign = MD5Util.string2MD5(SysBasicUtil.getConfig("envi") + DateUtil.today());
        log.debug("审批系统对接，参数token[{}]", token);
        log.debug("审批系统对接，参数approval[{}]", approvalJson);
        if (!Objects.equals(transSign, token)) { //验证秘钥
            return;
        }
        log.debug("审批系统对接，秘钥校验通过");
        boolean status = policeService.onlineApproval(approvalJson);
        PrintWriter writer = response.getWriter();
        writer.print(status? DictConst.Y : DictConst.N);
        writer.close();
    }

    /**
     * 上传审批结果文件（从审批列表导入的）
     *
     * @return
     */
    @RequestMapping("/police/importApproval")
    public ModelAndView importApproval(MultipartHttpServletRequest request) {
        ModelAndView view = new ModelAndView("model/pc/police/approvalList");
        MultipartFile file = request.getFile("approvalFile");
        try {
            String jsonStr = new String(CipherDESUtil.decrypt(file.getBytes(), Const.APPROVAL_KEY),"UTF-8");
            int resultint = policeService.importApproval(jsonStr);
            view.addObject("result",resultint);
        } catch (Exception e) {
            e.printStackTrace();
            view.addObject("result","0");
        }
        return view;
    }


    /**
     * 上传同步文件结果文件（从同步日志列表导入的）
     *
     * @return
     */
    @RequestMapping("/police/importSyncFileLog")
    public ModelAndView importSyncFileLog(MultipartHttpServletRequest request) {
        ModelAndView view = new ModelAndView("model/pc/police/FileSyncLogList");
        MultipartFile file = request.getFile("logFile");
        try {
            String jsonStr = new String(CipherDESUtil.decrypt(file.getBytes(), Const.APPROVAL_KEY),"UTF-8");
            int resultInt = logService.importFileSyncFile(jsonStr);
            view.addObject("result",resultInt);
        } catch (Exception e) {
            e.printStackTrace();
            view.addObject("result","0");
        }
        return view;
    }


}