package com.tmerclub.cloud.payment.service;

import com.tmerclub.cloud.api.payment.allinpay.member.resp.*;
import com.tmerclub.cloud.api.payment.dto.BindCompanyAccountDTO;
import com.tmerclub.cloud.api.payment.dto.SetCompanyInfoDTO;
import com.tmerclub.cloud.api.payment.dto.UpdateCompanyInfoDTO;
import com.tmerclub.cloud.payment.allinpay.member.req.IdCardCollectByFileUpload;
import com.tmerclub.cloud.payment.allinpay.member.resp.CardBinInfo;
import com.tmerclub.cloud.payment.dto.*;
import com.tmerclub.cloud.payment.dto.*;

import java.util.List;

/**
 * @author TRACK
 */
public interface AllinpayCompanyService {

    /**
     * 注册企业会员
     * @param bizUserId
     */
    void createCompanyMember(String bizUserId);

    /**
     * 获取企业信息
     * @param tenantId
     * @return
     */
    CompanyInfo getCompanyInfo(String tenantId);

    /**
     * 发送短信验证码
     * @param bizUserId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void sendVerificationCode(String bizUserId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 绑定手机
     * @param bizUserId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void bindPhone(String bizUserId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 解绑手机(商户无法创建提现订单，给与提示)
     * @param bizUserId 用户id
     * @param verificationCodeDTO 短信验证码类
     */
    void unbindPhone(String bizUserId, VerificationCodeDTO verificationCodeDTO);

    /**
     * 设置企业信息
     * @param tenantId 商户id
     * @param backUrl 通知地址
     * @param setCompanyInfoDTO 设置企业信息类
     * @return
     */
    SetCompanyInfoResp setCompanyInfo(String tenantId, String backUrl, SetCompanyInfoDTO setCompanyInfoDTO);

    /**
     * 修改企业信息
     * @param tenantId 商户id
     * @param backUrl 通知地址
     * @param updateCompanyInfoDTO 设置企业信息类
     * @return
     */
    UpdateCompanyInfoResp updateCompanyInfo(String tenantId, String backUrl, UpdateCompanyInfoDTO updateCompanyInfoDTO);

    /**
     * 影印件采集
     * @param idCardCollectDTO 影印件信息
     * @param backUrl 异步通知地址
     * @return 采集结果
     */
    IdCardCollectResp idCardCollect(IdCardCollectDTO idCardCollectDTO, String backUrl);

    /**
     * 影印件采集（文件上传模式）
     * @param idCardCollectByFileUpload
     * @return
     */
    IdCardCollectByFileUploadResp idcardCollectByFileUpload(IdCardCollectByFileUpload idCardCollectByFileUpload);

    /**
     * 查询卡bin
     * @param cardNo 卡号
     * @return
     */
    CardBinInfo getBankCardBin(String cardNo);

    /**
     * 请求绑定银行卡
     * @param tenantId
     * @param applyBankCardDTO
     * @param legalName
     */
    void applyBindBankCard(String tenantId, ApplyBankCardDTO applyBankCardDTO, String legalName);

    /**
     * 确认绑定银行卡
     * @param tenantId
     * @param bindBankCardDTO'
     * @param legalName
     */
    void bindBankCard(String tenantId, BindBankCardDTO bindBankCardDTO, String legalName);

    /**
     * 解绑银行卡
     * @param tenantId
     * @param unbindBankCardDTO
     */
    void unbindBankCard(String tenantId, UnbindBankCardDTO unbindBankCardDTO);

    /**
     * 查询银行卡
     * @param tenantId
     * @param cardNo
     * @return
     */
    List<BindCard> queryBankCard(String tenantId, String cardNo);

    /**
     * 企业会员绑定对公户
     * @param bizUserId
     * @param bindCompanyAccountDTO
     * @param companyName
     */
    void bindCompanyAccount(String bizUserId, BindCompanyAccountDTO bindCompanyAccountDTO, String companyName);

    /**
     * 删除缓存
     * @param tenantId
     */
    void deleteCache(String tenantId);

    /**
     * 账户提现协议签约
     * @param bizUserId 商户系统用户id
     * @param backUrl 通知地址
     * @param signAcctProtocolDTO 签约提现协议类
     * @return
     */
    String signAcctProtocol(String bizUserId, String backUrl, SignAcctProtocolDTO signAcctProtocolDTO);

    /**
     * 账户协议签约查询
     * @param bizUserId 商户系统用户id
     * @param signAcctProtocolDTO 签约提现协议类
     * @return
     */
    String signContractQuery(String bizUserId, SignAcctProtocolDTO signAcctProtocolDTO);

    /**
     * 获取影印件状态
     * @param ocrRegnumComparisonResult
     * @param ocrIdcardComparisonResult
     * @return
     */
    Integer getIdCardStatus(Integer ocrRegnumComparisonResult, Integer ocrIdcardComparisonResult);
}
