package com.bohuikeji.delivery.backstage.controller.admin;

import com.alipay.api.response.AlipayFundAccountQueryResponse;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bohuikeji.delivery.backstage.entity.*;
import com.bohuikeji.delivery.backstage.pay.AliPay;
import com.bohuikeji.delivery.backstage.service.*;
import com.bohuikeji.frame.module.admin.annotation.InitLog;
import com.bohuikeji.frame.module.admin.base.ControllerBase;
import com.bohuikeji.frame.module.admin.entity.back.APIEntity;
import com.bohuikeji.frame.module.admin.entity.sys.SysUser;
import com.bohuikeji.frame.module.admin.service.ISysChartService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.math.BigDecimal;
import java.time.Duration;
import java.time.LocalDateTime;
import java.util.List;


/**
 * 派送员信息
 * @author 10552
 */
@Slf4j
@RestController
@RequestMapping("/courier/exam")
public class CourierExamController extends ControllerBase {

    @Autowired
    ISysChartService chartService;
    @Autowired
    ITCourierService courierService;
    @Autowired
    ITCourierrExamService courierrExamService;
    @Autowired
    ITCourierWithdrawService withdrawService;
    @Autowired
    ITOrderService orderService;
    @Autowired
    ITNewsService newsService;
    @Autowired
    ITCourierCardService cardService;
    @Autowired
    ITCourierPayService courierPayService;
    @Autowired
    ITRefundService refundService;



    /**
     * 派送员退款审核通过
     * @param courierExamId
     */
    @InitLog(value = "派送员退款审核通过")
    @RequestMapping("/getAdopt")
    public APIEntity getAdopt(Integer courierExamId){
        SysUser loginUser=getLoginUser();
        TCourierExam tCourierExam=courierrExamService.getById(courierExamId);
        TCourier courier = courierService.getById(tCourierExam.getCourierId());
        log.info("当前登陆用户角色:[{}]",loginUser.getRoleId());
        if(loginUser.getRoleId().equals(7)){
            if("已通过".equals(tCourierExam.getFranExam())){
                return APIEntity.fail("该审核记录您已通过，请不要重复审核");
            }
            if("已驳回".equals(tCourierExam.getFranExam())){
                return APIEntity.fail("该审核记录您已驳回，请不要重复审核");
            }
            tCourierExam.setFranExam("已通过");
            tCourierExam.setFranAuditUser(loginUser.getUserName());
            tCourierExam.setUpdateTime(LocalDateTime.now());
            courierrExamService.updateById(tCourierExam);
        }
        if(loginUser.getRoleId().equals(1)){
            if("已通过".equals(tCourierExam.getPlatformExam())){
                return APIEntity.fail("该审核记录您已通过，请不要重复审核");
            }
            if("已驳回".equals(tCourierExam.getFranExam())){
                return APIEntity.fail("该审核记录加盟商已驳回，请进行“驳回”处理");
            }
            if("待审核".equals(tCourierExam.getFranExam()) && !tCourierExam.getFranId().equals(loginUser.getFranId()) && Duration.between(tCourierExam.getCreateTime(),LocalDateTime.now()).toHours()<1){
                return APIEntity.fail("提交时间未超过1小时，暂由加盟商审核");
            }
            List<TCourierPay> payList=courierPayService.list(new QueryWrapper<TCourierPay>().eq("player_id",courier.getCourierId()).eq("pay_scenario","入驻缴费").eq("pay_status","已支付"));
            log.info("支付记录数量:[{}]",payList.size());
            if(payList.size() == 0){
                return APIEntity.fail("该派送员没有支付记录，请检查是否支付");
            }
            if(payList.size() > 0){
                AlipayFundAccountQueryResponse response= AliPay.queryAccount();
                if (response==null){
                    APIEntity.fail("第三方系统准备中，请再试一次~！");
                }
                //log.info("@@@@@@@支付宝资金余额:{}",new BigDecimal(response.getAvailableAmount()));
                /*if(courier.getCourierSettledMoney().compareTo(new BigDecimal(response.getAvailableAmount()))==1){
                    return APIEntity.fail("您好，支付宝账户余额不足，请及时充值");
                }*/
                tCourierExam.setFranExam("已通过");
                tCourierExam.setPlatformExam("已通过");
                tCourierExam.setExamStatus("审核成功");
                tCourierExam.setPlatformAuditUser(loginUser.getUserName());
                tCourierExam.setUpdateTime(LocalDateTime.now());
                if(courierrExamService.updateById(tCourierExam)){
                    refundService.ettlecCancel(payList,courier);
                }
            }
        }
        return APIEntity.success();
    }



    /**
     * 派送员退款驳回
     * @return
     */
    @PostMapping("/getReject")
    public APIEntity getReject(Integer courierExamId,String desc){
        SysUser loginUser=getLoginUser();
        TCourierExam tCourierExam=courierrExamService.getById(courierExamId);
        TCourier courier = courierService.getById(tCourierExam.getCourierId());
        log.info("当前登陆用户角色:[{}]",loginUser.getRoleId());
        if(loginUser.getRoleId().equals(7)){
            if("已驳回".equals(tCourierExam.getFranExam())){
                return APIEntity.fail("该审核记录您已驳回，请不要重复审核");
            }
            if("已通过".equals(tCourierExam.getFranExam())){
                return APIEntity.fail("该审核记录您已通过，请不要重复审核");
            }
            tCourierExam.setFranExam("已驳回");
            tCourierExam.setRejectExplain(desc);
            tCourierExam.setFranAuditUser(loginUser.getUserName());
            tCourierExam.setUpdateTime(LocalDateTime.now());
            courierrExamService.updateById(tCourierExam);
        }
        if(loginUser.getRoleId().equals(1)){
            if("已驳回".equals(tCourierExam.getPlatformExam())){
                return APIEntity.fail("该审核记录您已驳回，请不要重复审核");
            }
            if("待审核".equals(tCourierExam.getFranExam()) && !tCourierExam.getFranId().equals(loginUser.getFranId()) && Duration.between(tCourierExam.getCreateTime(),LocalDateTime.now()).toHours()<1){
                return APIEntity.fail("提交时间未超过1小时，暂由加盟商审核");
            }
            tCourierExam.setFranExam("已驳回");
            tCourierExam.setPlatformExam("已驳回");
            tCourierExam.setExamStatus("审核失败");
            tCourierExam.setRejectExplain(desc);
            tCourierExam.setPlatformAuditUser(loginUser.getUserName());
            tCourierExam.setUpdateTime(LocalDateTime.now());
            if(courierrExamService.updateById(tCourierExam)){
                courier.setCourierPayStatus("已缴费");
                courier.setGrade(tCourierExam.getGrade());
                courierService.updateById(courier);
                newsService.pushCourierMsg1(courier.getCourierId(),"审核驳回通知","派送员：{0}您好，您提交的退款审核未通过。原因：{1}。"+
                        "如有问题，可搜索关注微信公众号：同城急送  使用对话框进行咨询。",courier.getCourierName(),desc);
                return  APIEntity.success();
            }
        }
        return  APIEntity.fail("系统繁忙，请稍后再试！");
    }

}
