package cn.iocoder.yudao.module.system.service.rental;

import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.customer.RentalCustomerPageReqVO;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.customer.RentalCustomerSaveReqVO;
import cn.iocoder.yudao.module.system.controller.admin.rental.vo.customer.RentalCustomerStatusReqVO;
import cn.iocoder.yudao.module.system.dal.dataobject.rental.RentalCustomerDO;

import javax.validation.Valid;
import java.math.BigDecimal;
import java.util.List;

/**
 * 租赁客户 Service 接口
 *
 * @author 符溶馨
 */
public interface RentalCustomerService {

    /**
     * 创建租赁客户
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    Long createRentalCustomer(@Valid RentalCustomerSaveReqVO createReqVO);

    /**
     * 更新租赁客户
     *
     * @param updateReqVO 更新信息
     */
    void updateRentalCustomer(@Valid RentalCustomerSaveReqVO updateReqVO);

    /**
     * 更新租赁客户状态
     * @param updateReqVO 更新信息
     */
    void updateRentalCustomerStatus(RentalCustomerStatusReqVO updateReqVO);

    /**
     * 更新客户剩余押金金额
     *
     * @param id 编号
     * @param amount 金额
     */
    void updateRentalCustomerAmount(Long id, BigDecimal amount);

    /**
     * 删除租赁客户
     *
     * @param id 编号
     */
    void deleteRentalCustomer(Long id);

    /**
     * 获得租赁客户
     *
     * @param id 编号
     * @return 租赁客户
     */
    RentalCustomerDO getRentalCustomer(Long id);

    /**
     * 获得租赁客户分页
     *
     * @param pageReqVO 分页查询
     * @return 租赁客户分页
     */
    PageResult<RentalCustomerDO> getRentalCustomerPage(RentalCustomerPageReqVO pageReqVO);

    /**
     * 获得租赁客户列表
     * @return 租赁客户列表
     */
    List<RentalCustomerDO> getRentalCustomerList();

    /**
     * 得对应工厂的客户列表
     * @param userId 当前登陆用户编号
     * @return 客户列表
     */
    List<RentalCustomerDO> getListByFactory(Long userId);
}