
package com.tmerclub.cloud.api.payment.feign;

import com.tmerclub.cloud.api.payment.allinpay.member.resp.*;
import com.tmerclub.cloud.api.payment.allinpay.order.resp.PayByBackSmsResp;
import com.tmerclub.cloud.api.payment.allinpay.order.resp.QueryBalanceResp;
import com.tmerclub.cloud.api.payment.allinpay.order.resp.WithdrawApplyResp;
import com.tmerclub.cloud.api.payment.dto.AllinpayBalanceDTO;
import com.tmerclub.cloud.api.payment.dto.BindPayAcctDTO;
import com.tmerclub.cloud.api.payment.dto.SetCompanyInfoDTO;
import com.tmerclub.cloud.api.payment.dto.UpdateCompanyInfoDTO;
import com.tmerclub.cloud.common.response.ServerResponseEntity;

import java.util.List;

/**
 * @author lanhai
 */
public interface AllinpayFeignClient {

    /**
     * 创建通联支付企业会员
     * @param bizUserIds
     * @return
     */
    ServerResponseEntity<Void> batchCreateMember(List<String> bizUserIds);

    /**
     * 批量创建通联支付个人会员
     * @param bizUserIds
     * @return 创建会员成功数量
     */
    ServerResponseEntity<Integer> batchCreatePersonalMember(List<String> bizUserIds);

    /**
     * 获取企业信息
     * @param bizUserId
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<CompanyInfo> getCompanyInfo(String bizUserId);

    /**
     * 获取通联个人会员信息
     * @param bizUserId
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<PersonalMemberInfo> getPersonalMemberInfo(String bizUserId);

    /**
     * 设置企业信息
     * @param setCompanyInfoDTO
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<SetCompanyInfoResp> setCompanyInfo(SetCompanyInfoDTO setCompanyInfoDTO);

    /**
     * 更新企业信息
     * @param updateCompanyInfoDTO
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<UpdateCompanyInfoResp> updateCompanyInfo(UpdateCompanyInfoDTO updateCompanyInfoDTO);

    /**
     * 影印件采集
     * 这个方法是用base64的，暂时不用，采用文件上传的模式
     * @param imageUrl
     * @param picType
     * @param fileType
     * @param bizUserId
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<IdCardCollectResp> idCardCollect(String imageUrl,
                                                                                           Integer picType,
                                                                                           String fileType,
                                                                                           String bizUserId);

    /**
     * 影印件采集-文件上传模式
     * @param legalPicFaceToken
     * @param legalPicEmblemToken
     * @param picType
     * @param token
     * @param bizUserId
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<IdCardCollectByFileUploadResp> idCardCollectByFileUpload(String legalPicFaceToken,
                                                                                                                   String legalPicEmblemToken,
                                                                                                                   Integer picType,
                                                                                                                   String token,
                                                                                                                   String bizUserId);

    /**
     * 查询银行卡列表
     * @param bizUserId
     * @param cardNo
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<List<BindCard>> listBindCard(String bizUserId,
                                                                                       String cardNo);

    /**
     * 查询账户集余额
     * @param bizUserId
     * @param sysType
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<QueryBalanceResp> queryBalance(String bizUserId,
                                                                                         Integer sysType);

    /**
     * 重发支付短信验证码
     * @param bizOrderNo
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<Void> resendPaySms(String bizOrderNo);

    /**
     * 申请提现
     * @param bizUserId 商户号
     * @param amount 提现金额
     * @param bankCardNo 银行卡号
     * @param sysType 系统类型
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<WithdrawApplyResp> withdrawApply(String bizUserId,
                                                                                           Long amount,
                                                                                           String bankCardNo,
                                                                                           Integer sysType);

    /**
     * 确认支付 后台+短信验证码
     * @param bizUserId
     * @param bizOrderNo
     * @param verificationCode
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<PayByBackSmsResp> payByBackSms(String bizUserId,
                                                                                         String bizOrderNo,
                                                                                         String verificationCode);

    /**
     * 商家充值申请
     * @param amount
     * @param shopId
     * @param walletLogId
     * @param returnUrl
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<?> rechargeApply(Long amount,
                                                                           Long shopId,
                                                                           Long walletLogId,
                                                                           String returnUrl);

    /**
     * 获取影印件状态
     * @param bizUserId
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<Integer> getIdCardStatus(String bizUserId);

    /**
     * 修改通联会员状态
     * @param userId 用户id
     * @param status 状态(0:禁用, 1:解禁)
     */
    void updateAllinpayMemberStatus(Long userId,
                                    Integer status);

    /**
     * 用户绑定支付标识
     * @param userId 用户id
     * @param payAcct 支付标识
     * @param socialType 第三方类型
     */
    void bindPayAcct(Long userId,
                     String payAcct,
                     Integer socialType);

    /**
     * 批量绑定用户支付标识
     * @param bindPayAcctDTOList
     */
    void batchBindPayAcct(List<BindPayAcctDTO> bindPayAcctDTOList);

    /**
     * 用户是否绑定支付标识
     * @param userId 用户id
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<Boolean> isBindPayAcct(Long userId);

    /**
     * 获取通联用户余额信息
     *
     * @param userId
     * @param sysType
     * @return
     */
    com.tmerclub.cloud.common.response.ServerResponseEntity<AllinpayBalanceDTO> getAllinpayBalance(Long userId,
                                                                                                 Integer sysType);
}
