package cn.hnthyy.thmz.controller.mz;


import cn.hnthyy.thmz.Utils.WindowsUtil;
import cn.hnthyy.thmz.comment.UserLoginToken;
import cn.hnthyy.thmz.entity.his.zy.PatientMiSfz;
import cn.hnthyy.thmz.enums.GenderEnum;
import cn.hnthyy.thmz.service.his.zy.PatientMiSfzService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import java.util.HashMap;
import java.util.Map;

@Slf4j
@RestController
public class PatientMiSzController {

    @Autowired
    private PatientMiSfzService patientMiSfzService;



    /**
     * 查询用户的身份证信息
     * @return
     */
    @UserLoginToken
    @RequestMapping(value = "/getPatientMiSfzByPatientId", method = {RequestMethod.GET})
    public Map<String, Object> getPatientMiSfzByPatientId(@RequestParam("patientId") String patientId) {
        Map<String, Object> resultMap = new HashMap<>();
        if(StringUtils.isBlank(patientId)){
            resultMap.put("code", -1);
            resultMap.put("message", "查询用户的身份证信息失败,门诊id为空");
            return resultMap;
        }
        try {
            PatientMiSfz patientMiSfz=patientMiSfzService.queryPatientMiSfzByPatientId(patientId);
            if(patientMiSfz!=null){
                resultMap.put("code", 0);
                resultMap.put("message", "查询用户的身份证信息成功");
                resultMap.put("data",patientMiSfz);
                return resultMap;
            }
            resultMap.put("code", -1);
            resultMap.put("message", "查询用户的身份证信息失败，当前患者未上传身份证信息");
            return resultMap;
        }catch (Exception e){
            e.printStackTrace();
            resultMap.put("code", -1);
            resultMap.put("message", "查询用户的身份证信息失败,错误信息：【"+e.getMessage()+"】");
            log.error("查询用户的身份证信息失败,错误信息：[]",e.getMessage());
            return resultMap;
        }
    }




    /**
     * 上传身份证
     *
     * @param patientMiSfz
     * @return
     */
    @UserLoginToken
    @RequestMapping(value = "/savePatientMiSfz", method = RequestMethod.POST)
    public Map<String, Object> savePatientMiSfz(@RequestBody PatientMiSfz patientMiSfz) {
        Map<String, Object> resultMap = new HashMap<>();
        try {
            if (patientMiSfz == null) {
                resultMap.put("code", -1);
                resultMap.put("message", "参数不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getSocialNo())) {
                resultMap.put("code", -1);
                resultMap.put("message", "身份证号码不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getName())) {
                resultMap.put("code", -1);
                resultMap.put("message", "姓名不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getSex())) {
                resultMap.put("code", -1);
                resultMap.put("message", "性别不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getNation())) {
                resultMap.put("code", -1);
                resultMap.put("message", "民族不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getBirthDay())) {
                resultMap.put("code", -1);
                resultMap.put("message", "生日不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getAddress())) {
                resultMap.put("code", -1);
                resultMap.put("message", "家庭住址不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getAgency())) {
                resultMap.put("code", -1);
                resultMap.put("message", "发证机关不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getExpirestart())) {
                resultMap.put("code", -1);
                resultMap.put("message", "身份证有效期开始时间不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getExpireend())) {
                resultMap.put("code", -1);
                resultMap.put("message", "身份证有效期结束时间不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getTxImageBase64())) {
                resultMap.put("code", -1);
                resultMap.put("message", "身份证头像不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getInpatientNo())) {
                resultMap.put("code", -1);
                resultMap.put("message", "住院号不能为空");
                return resultMap;
            }
            if (StringUtils.isBlank(patientMiSfz.getPatientId())) {
                resultMap.put("code", -1);
                resultMap.put("message", "门诊号不能为空");
                return resultMap;
            }
            WindowsUtil.generateImage(patientMiSfz.getTxImageBase64());
            WindowsUtil.convert(ResourceUtils.getFile("classpath:images") + "\\tx\\tx.jpg",ResourceUtils.getFile("classpath:images") + "\\tx\\tx1.jpg");
            patientMiSfz.setTxImage(WindowsUtil.image2byte(ResourceUtils.getFile("classpath:images") + "\\tx","tx1.jpg"));
            String [] arr = patientMiSfz.getBirthDay().split("-");
            WindowsUtil.generateIdcodeZ(patientMiSfz.getName(), GenderEnum.MAN.code.toString().equals(patientMiSfz.getSex())?GenderEnum.MAN.name:GenderEnum.WOMAN.name,patientMiSfz.getNation(),arr[0],arr[1],arr[2],patientMiSfz.getAddress(),patientMiSfz.getSocialNo());
            patientMiSfz.setSfzImage(WindowsUtil.image2byte(ResourceUtils.getFile("classpath:images") + "\\idcode","idz.jpg"));
            patientMiSfz.setBirthDay(arr[0]+"年"+arr[1]+"月"+arr[2]+"日");
            int num = patientMiSfzService.savePatientMiSfz(patientMiSfz);
            if (num == 0) {
                resultMap.put("code", -1);
                resultMap.put("message", "上传身份证失败");
                return resultMap;
            }
            resultMap.put("code", 0);
            resultMap.put("message", "上传身份证成功");
            return resultMap;
        } catch (Exception e) {
            resultMap.put("code", -1);
            resultMap.put("message", "上传身份证失败，系统出现位置错误");
            log.error(e.getMessage());
            return resultMap;
        }
    }


}
