package com.pz.accompany;

import com.pz.common.core.controller.BaseController;
import com.pz.common.core.domain.PageQuery;
import com.pz.common.core.domain.R;
import com.pz.common.core.page.TableDataInfo;
import com.pz.common.utils.StringUtils;
import com.pz.merchant.domain.bo.EmployeesBo;
import com.pz.merchant.domain.vo.EmployeesVo;
import com.pz.merchant.service.IEmployeesService;
import com.pz.system.domain.bo.IncomeBo;
import com.pz.system.domain.vo.IncomeVo;
import com.pz.system.service.IIncomeService;
import com.pz.system.service.ISysUserService;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.rowset.serial.SerialException;
import java.math.BigDecimal;
import java.util.Optional;

/**
 * 陪诊员-财务收益
 *
 * @author ruoyi
 * @date 2023-09-07
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/accompany/employees")
public class AccompanyEmployeesIncomeController extends BaseController {

    private final IEmployeesService iEmployeesService;

    private final IIncomeService iIncomeService;

    private final ISysUserService iSysUserService;

    /**
     * 获取总收益与余额
     */
    @GetMapping("/getIncome")
    public R<EmployeesVo> getIncome() {
        return R.ok(iEmployeesService.queryByUserId(getUserId()));
    }


    /**
     * 查询陪诊员提现记录
     */
    @GetMapping("/list")
    public TableDataInfo<IncomeVo> list(IncomeBo bo, PageQuery pageQuery) {
        EmployeesVo employeesVo = iEmployeesService.queryByUserId(getUserId());
        bo.setEcId(employeesVo.getId());
        return iIncomeService.queryByEidList(bo, pageQuery);
    }


    /**
     * 陪诊员提现
     *
     * @param bo
     * @return
     */
    @PutMapping("/withdrawEmployees")
    public R<Boolean> withdrawEmployees(IncomeBo bo) {
        //获取openid
        Optional.ofNullable(iSysUserService.selectUserById(getUserId()))
            .ifPresent(sysUser -> {
                bo.setOpenid(sysUser.getOpenId());
            });
        Optional.ofNullable(iEmployeesService.queryByUserId(getUserId()))
            .ifPresent(employeesVo -> {
                bo.setEcId(employeesVo.getId());
                //判断提现金额是否大于余额
                if (bo.getAmount().compareTo(StringUtils.isNotBlank(employeesVo.getBalance()) ? new BigDecimal(employeesVo.getBalance()) : new BigDecimal("0.00")) > 0) {
                    try {
                        throw new SerialException("余额不足以本次提现");
                    } catch (SerialException e) {
                        throw new RuntimeException(e);
                    }
                }
            });
        return R.ok(iIncomeService.withdrawEmployees(bo));
    }
}