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

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.bohuikeji.delivery.backstage.entity.*;
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.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

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


/**
 * 派送员信息
 * @author 10552
 */
@Slf4j
@RestController
@RequestMapping("/courier/type")
public class CourierTypeExamineController 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;
    @Autowired
    ITCourierTypeExamineService courierTypeExamineService;


    /**
     * 派送员类型切换申请通过
     * @param examineId
     * @return
     */
    @InitLog(value = "派送员类型切换申请通过")
    @RequestMapping("/getAdopt")
    public APIEntity getAdopt(Integer examineId){
        SysUser loginUser=getLoginUser();
        TCourierTypeExamine courierTypeExamine=courierTypeExamineService.getById(examineId);
        TCourier courier = courierService.getById(courierTypeExamine.getCourierId());
        List<TOrder> tOrders = orderService.list(new QueryWrapper<TOrder>().eq("courier_id",courierTypeExamine.getCourierId()).eq("order_status","已完成").eq("courier_sett_status","未结算"));
        log.info("当前登陆用户角色:[{}]",loginUser.getRoleId());
        if("全职".equals(courierTypeExamine.getCourierType()) && tOrders.size()>0){
            return APIEntity.fail("您好，全职切换成兼职需要将全职的订单设置成已结算状态！");
        }
        if(loginUser.getRoleId().equals(7)){
            if("已通过".equals(courierTypeExamine.getFranExam())){
                return APIEntity.fail("该审核记录您已通过，请不要重复审核");
            }
            if("已驳回".equals(courierTypeExamine.getFranExam())){
                return APIEntity.fail("该审核记录您已驳回，请不要重复审核");
            }
            courierTypeExamine.setFranExam("已通过");
            courierTypeExamine.setFranAuditUser(loginUser.getUserName());
            courierTypeExamine.setCourierUpdateTime(LocalDateTime.now());
            courierTypeExamineService.updateById(courierTypeExamine);
        }
        if(loginUser.getRoleId().equals(1)){
            if("已通过".equals(courierTypeExamine.getPlatformExam())){
                return APIEntity.fail("该审核记录您已通过，请不要重复审核");
            }
            if("已驳回".equals(courierTypeExamine.getFranExam())){
                return APIEntity.fail("该审核记录加盟商已驳回，请进行“驳回”处理");
            }
            if("待审核".equals(courierTypeExamine.getFranExam()) && !courierTypeExamine.getFranId().equals(loginUser.getFranId()) && Duration.between(courierTypeExamine.getCourierCreateTime(),LocalDateTime.now()).toHours()<1){
                return APIEntity.fail("提交时间未超过1小时，暂由加盟商审核");
            }
            courierTypeExamine.setFranExam("已通过");
            courierTypeExamine.setPlatformExam("已通过");
            courierTypeExamine.setExamineStatus("审核成功");
            courierTypeExamine.setPlatformAuditUser(loginUser.getUserName());
            courierTypeExamine.setCourierUpdateTime(LocalDateTime.now());
            if(courierTypeExamineService.updateById(courierTypeExamine)){
                courier.setCourierType(courierTypeExamine.getApplyType());
                courier.setCourierContUrl(courierTypeExamine.getCourierContUrl());
                courier.setCourierInsUrl(courierTypeExamine.getCourierInsUrl());
                courierService.updateById(courier);
            }
        }
        return APIEntity.success();
    }



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

    /**
     * 全职切换成兼职需要切换将原全职的订单结算
     * @return
     */
    @GetMapping("/setwithdrawal")
    public APIEntity setWithdrawal(Integer examineId){
        SysUser loginUser=getLoginUser();
        TCourierTypeExamine courierTypeExamine=courierTypeExamineService.getById(examineId);
        List<TOrder> tOrders = orderService.list(new QueryWrapper<TOrder>().eq("courier_id",courierTypeExamine.getCourierId()).eq("order_status","已完成").eq("courier_sett_status","未结算"));
        for(TOrder tOrder : tOrders){
            orderService.updateById(tOrder.setCourierSettStatus("已结算"));
        }
        return  APIEntity.success("您好，您全职是的订单已结算完成");
    }

}
