package com.crm.pay.service;

import com.crm.pay.entity.finance.withdraw.FinanceWithdrawApproveChannelEntity;
import com.crm.pay.entity.finance.withdraw.FinanceWithdrawApproveChannelSubmitEntity;
import com.crm.rely.backend.core.dto.base.BaseResultDto;
import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
import com.crm.rely.backend.core.exception.ServiceException;
import com.crm.rely.backend.model.dto.finance.withdraw.FinanceWithdrawDto;
import com.crm.rely.backend.model.entity.finance.withdraw.*;
import com.crm.rely.backend.model.pojo.table.FinanceWithdrawTable;

import java.util.List;

public interface FinanceWithdrawService {

    BaseResultDto save(FinanceWithdrawBaseAddEntity entity) throws Exception;

    void approve(FinanceWithdrawApproveEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveSalesEntity entity) throws ServiceException;

    BaseResultDto<Object> cancel(FinanceWithdrawCancelEntity entity) throws Exception;

    BaseResultDto<Object> cancelBackstage(FinanceWithdrawCancelEntity entity) throws Exception;

    void approve(FinanceWithdrawApproveManagerEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveBackstageEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveInfoEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveInfosEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveChannelSubmitEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveChannelEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveChannelSubmitsEntity entity) throws ServiceException;

    void approve(FinanceWithdrawApproveChannelsEntity entity) throws ServiceException;

    void delete(FinanceWithdrawDeleteEntity entity) throws ServiceException;

    ResultWithPagerDto<FinanceWithdrawDto> searchList(FinanceWithdrawSearchListEntity entity) throws ServiceException;

    BaseResultDto<List<FinanceWithdrawDto>> searchListExport(FinanceWithdrawSearchListEntity entity) throws ServiceException;

    BaseResultDto<List<FinanceWithdrawDto>> searcherByIdsExport(FinanceWithdrawSearchByIdsEntity entity) throws ServiceException;

    FinanceWithdrawDto searchSingle(Long id) throws ServiceException;

    FinanceWithdrawTable getById(Long id) throws ServiceException;

    FinanceWithdrawTable getBySerial(String serial) throws ServiceException;

    void applyDigitalWithdrawSendEmailCode(FinanceApplyDigitalWithdrawSendEmailCodeEntity entity) throws ServiceException;

    void applyDigitalWithdrawValidateCode(FinanceWithdrawBaseAddEntity entity) throws ServiceException;

    int getRemainingReductionNumber(Long cId) throws ServiceException;

    //BaseResultDto getWebsdkLink(WebsdkLinkAliEntity entity, Long id) throws ServiceException;

    void sendFastWithdraw(FinanceWithdrawApproveManagerEntity entity) throws Exception;

    boolean exFastWithdraw(FinanceWithdrawTable table) throws ServiceException;

    boolean exFastWithdraw(Long id) throws ServiceException;

    boolean exVietnamFastWithdraw(FinanceWithdrawTable table) throws ServiceException;

    void vietnamFastWithdraw(Long id) throws Exception;

    FinanceWithdrawTable getByChannelSerial(String channelSerial) throws ServiceException;

}
