package com.ruoyi.zzb.common.controller;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.zzb.common.utils.CommonUtils;
import com.ruoyi.zzb.common.bean.RspResult;
import com.ruoyi.zzb.common.service.BaseService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/api/base")
public class BaseController {

    @Autowired
    private BaseService baseService;
    @Value("${module.zyww.templateFilePath}")
    private String zywwTemplateFilePath;
    @Value("${module.dbjz.templateFilePath}")
    private String dbjzTemplateFilePath;
    @Value("${module.hybz.templateFilePath}")
    private String hybzTemplateFilePath;

    /**
     * 向目标邮箱地址发送一条带附件的邮件
     * @param reqBody
     * @return
     */
    @PostMapping("/send")
    public JSONObject send(@RequestBody JSONObject reqBody){
        String subject;          // 邮件主题
        String text;             // 邮件内容
        String attachmentPath;   // 每一个模块对应的的申请模板文件在linux服务器的存储路径
        String toEmail = reqBody.getString("toEmail");
        if(StringUtils.isBlank(toEmail) || !CommonUtils.isRightEmail(toEmail)){
            log.error("toEmail参数非法");
            return RspResult.error("toEmail参数非法");
        }
        // 模块编码  ***前端在对应页面获取申请模板文件时需手动传入该参数，后端根据该参数值向目标邮箱发送对应的申请模板文件
        String moduleCode = reqBody.getString("moduleCode");
        if(StringUtils.isBlank(moduleCode)){
            log.error("moduleCode参数为空");
            return RspResult.error("moduleCode参数为空");
        }
        if("zyww".equals(moduleCode)){
            subject = "【住院慰问】";
            text = "住院慰问相关内容......";
            attachmentPath = zywwTemplateFilePath;
            // 该模块在界面获取申请模板文件时需要选择具体的疾病种类（38种重大疾病之一），但从功能来看，对于后端业务没有实际用到该参数，待定......
            // 后续还会在提交申请页面时选择具体的疾病种类，在该页面进行选择更合理
//            String diseaseCode = reqBody.getString("diseaseCode");
//            todo ？？？
        } else if ("dbjz".equals(moduleCode)) {
            subject = "【大病救助】";
            text = "大病救助相关内容......";
            attachmentPath = dbjzTemplateFilePath;
        } else {
            subject = "【会员保障】";
            text = "会员保障相关内容......";
            attachmentPath = hybzTemplateFilePath;
        }
        try {
            baseService.sendEmail(toEmail, subject, text, attachmentPath);
            return RspResult.success("服务器发送邮件成功");
        } catch (Exception e){
            log.error("服务器发送邮件失败", e);
            return RspResult.error("服务器发送邮件失败 - " + e.getMessage());
        }
    }

}
