package com.ruoyi.zzb.hybz.controller;

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.config.RuoYiConfig;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.utils.SecurityUtils;
import com.ruoyi.zzb.common.bean.RspResult;
import com.ruoyi.zzb.common.utils.SnowflakeIdGenerator;
import com.ruoyi.zzb.common.domain.BaseFileInfo;
import com.ruoyi.zzb.hybz.domain.HybzApplyInfo;
import com.ruoyi.zzb.hybz.domain.HybzFileSetDTO;
import com.ruoyi.zzb.hybz.service.HybzService;
import com.ruoyi.zzb.zyww.domain.ZywwApplyInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@Slf4j
@RestController
@RequestMapping("/api/hybz")
public class HybzController {

    @Autowired
    private HybzService hybzService;

    /**
     * 保存一条【会员保障】申请信息记录，同时保存每一个上传文件项的需要提交的多个附件信息记录以及保存对应的文件到服务器
     * @param
     * @return
     */
    /*@PostMapping("/saveOrUpdate")
    public JSONObject saveOrUpdate(HybzApplyInfo hybzApplyInfo, HybzFileSetDTO hybzFileSetDTO){
        try {
            // 文件上传路径
            String fileStoragePath = RuoYiConfig.getUploadPath();
            SysUser user = SecurityUtils.getLoginUser().getUser();
            if(null != user){
                String applyFormId;
                if(StringUtils.isBlank(hybzApplyInfo.getApplyFormId())){   // 申请单ID为空代表是 新增操作
                    // 生成申请单ID
                    SnowflakeIdGenerator generator = new SnowflakeIdGenerator(1);
                    applyFormId = String.valueOf(generator.nextId());
                } else {   // 修改操作
                    applyFormId = hybzApplyInfo.getApplyFormId();
                }
                List<BaseFileInfo> baseFileInfoList = hybzService.processUploadAndBuildParams(hybzFileSetDTO, "hybz", "会员保障", applyFormId, fileStoragePath);
                // 等上传的文件写盘成功，再向数据库写入对应的申请信息和与之关联的文件信息
                hybzService.saveOrUpdateHybzApplyInfoAndBaseFileInfos(hybzApplyInfo, user, applyFormId, baseFileInfoList);
                return RspResult.success(true);
            }
            return RspResult.error("用户信息为空，【会员保障】申请信息无法保存/修改");
        } catch (Exception e){
            log.error("【会员保障】申请信息保存/修改失败", e);
            return RspResult.error("【会员保障】申请信息保存/修改失败 - " + e.getMessage());
        }
    }*/

    @PostMapping("/approve")
    public JSONObject approve(@RequestBody JSONObject reqBody){
        String applyFormId = reqBody.getString("applyFormId");
        String optFlag = reqBody.getString("optFlag");
        if(StringUtils.isBlank(applyFormId) || StringUtils.isBlank(optFlag)){
            log.error("审批参数为空");
            return RspResult.error("审批参数为空");
        }
        SysUser user = SecurityUtils.getLoginUser().getUser();
        try {
            if(null != user){
                if(hybzService.approveAndSaveApproveInfo(applyFormId, optFlag, user)){
                    return RspResult.success(true);
                }
            }
            return RspResult.error("用户信息为空，【会员保障】申请信息审批失败");
        } catch (Exception e){
            log.error("【会员保障】申请信息审批失败", e);
            return RspResult.error("【会员保障】申请信息审批失败 - " + e.getMessage());
        }
    }

    /**
     * 根据 审批状态码 分页查询【会员保障】申请信息列表
     * @param reqBody
     * @return
     */
    @PostMapping("/query")
    public JSONObject query(@RequestBody JSONObject reqBody){
        // 审批状态码  ---0：审批中，1：审批通过，2：审批驳回
        Integer approveStatus = reqBody.getInteger("approveStatus");
        String type = reqBody.getString("type");
        if(approveStatus == null || StringUtils.isBlank(type)){
            log.error("查询参数为空");
            return RspResult.error("查询参数为空");
        }
        try {
            return RspResult.success(hybzService.getDataByPage(approveStatus, type, reqBody));
        } catch (Exception e){
            log.error("根据条件分页查询【会员保障】申请信息发生异常", e);
            return RspResult.error("根据条件分页查询【会员保障】申请信息发生异常 - " + e.getMessage());
        }
    }


    /**
     * 保存/修改一条【会员保障】申请信息记录
     * @param
     * @return
     */
    @PostMapping("/saveOrUpdate")
    public JSONObject saveOrUpdate(@RequestBody HybzApplyInfo hybzApplyInfo){
        try {
            SysUser user = SecurityUtils.getLoginUser().getUser();
            if(null != user){
                String applyFormId = hybzApplyInfo.getApplyFormId();
                if(StringUtils.isBlank(applyFormId)){
                    return RspResult.error("applyFormId参数为空");
                }
                boolean optFlag = hybzService.saveOrUpdateHybzApplyInfo(hybzApplyInfo, user);
                return optFlag? RspResult.success(true) : RspResult.error("【会员保障】申请信息保存/修改失败");
            }
            return RspResult.error("用户信息为空，【会员保障】申请信息无法保存/修改");
        } catch (Exception e){
            log.error("【会员保障】申请信息保存/修改失败", e);
            return RspResult.error("【会员保障】申请信息保存/修改失败 - " + e.getMessage());
        }
    }









}
