package com.crm.ucard.service;

import com.crm.rely.backend.core.dto.base.BaseResultDto;
import com.crm.rely.backend.core.dto.base.ResultWithPagerDto;
import com.crm.rely.backend.core.dto.ucard.UcardWalletDepositTransactionDto;
import com.crm.rely.backend.core.dto.ucard.UcardWalletWithdrawDto;
import com.crm.rely.backend.core.dto.ucard.vaultody.VaultodyDepositAddressDto;
import com.crm.rely.backend.core.entity.ucard.CardWalletWithdrawApproveEntity;
import com.crm.rely.backend.core.entity.ucard.UcardWalletDepositTransactionPageEntity;
import com.crm.rely.backend.core.entity.ucard.UcardWalletWithdrawPageEntity;
import com.crm.rely.backend.core.entity.ucard.WalletWithdrawApplyEntity;
import com.crm.rely.backend.core.entity.ucard.vaultody.VaultodyDepositAddressPageEntity;
import com.crm.rely.backend.core.entity.ucard.vaultody.VaultodyGenerateDepositAddressEntity;
import com.crm.rely.backend.core.entity.ucard.vaultody.VaultodyResetDepositAddressEntity;
import com.crm.rely.backend.core.pojo.table.ucard.UcardWalletWithdrawTable;
import com.crm.rely.backend.exception.ServiceException;

public interface VaultodyService {

    /**
     * 生成钱包地址
     */
    String generateDepositAddress(VaultodyGenerateDepositAddressEntity entity) throws Exception;

    /**
     * 链接钱包地址
     */
    void linkAddress(String blockchain, String address) throws Exception;

    /**
     * ucard钱包提款申请
     */
    BaseResultDto walletWithdrawApply(WalletWithdrawApplyEntity entity) throws Exception;

    /**
     * 钱包提款审核
     */
    BaseResultDto walletWithdrawApprove(CardWalletWithdrawApproveEntity entity) throws Exception;

    /**
     * 创建代币请求
     */
    void createCoinTransactionRequest(UcardWalletWithdrawTable table) throws Exception;
    /**
     * 钱包提款列表
     */
    ResultWithPagerDto<UcardWalletWithdrawDto> getWalletWithdrawPage(UcardWalletWithdrawPageEntity entity) throws ServiceException;

    /**
     * 钱包地址分页列表
     */
    ResultWithPagerDto<VaultodyDepositAddressDto> getDepositAddressPage(VaultodyDepositAddressPageEntity entity) throws ServiceException;

    /**
     * 重置钱包地址
     */
    BaseResultDto resetDepositAddress(VaultodyResetDepositAddressEntity entity) throws ServiceException;

    void notify(String content, String xSignature) throws Exception;

    /**
     * 加密货币交易分页列表
     */
    ResultWithPagerDto<UcardWalletDepositTransactionDto> getWalletDepositTransactionPage(UcardWalletDepositTransactionPageEntity entity) throws ServiceException;

}
