package com.yn.bftl.thirdparty.modules.chinaums.service;

import com.yn.bftl.common.modules.auth.vo.ChinaumsAuthInfoVO;
import com.yn.bftl.common.modules.company.entity.ChinaumsAuthInfo;
import com.yn.bftl.thirdparty.modules.chinaums.dto.*;
import com.yn.bftl.thirdparty.modules.chinaums.vo.ChinaumsApplicationStatusVO;
import com.yn.bftl.thirdparty.modules.chinaums.vo.byx.ByxMchCreateVO;

/**
 * 认证服务
 *
 * @author huabiao
 * @create 2022/12/6  15:27
 **/
public interface AuthService {

    ByxMchCreateVO getFileUrl();

    ByxMchCreateVO getMchCreateUrl();

    /**
     * 企业-进件创建
     *
     * @param mchCreateDTO:商户创建DTO
     * @author huabiao
     * @create 2022/12/6  15:48
     */
    void mchCreate(MchCreateDTO mchCreateDTO);

    /**
     * 认证-查进件状态
     *
     * @return 商户认证状态
     * @author huabiao
     * @create 2022/12/6  15:50
     */
    ChinaumsApplicationStatusVO status();

    /**
     * 认证-信息
     *
     * @return 认证信息
     * @author huabiao
     * @create 2022/12/7  17:33
     */
    ChinaumsAuthInfoVO getAuthInfo();

    /**
     * 认证-信息
     *
     * @return 认证信息
     * @author huabiao
     * @create 2022/12/7  17:33
     */
    ChinaumsAuthInfo getCurrentAuthInfo();

    /**
     * 处理银联认证状态
     *
     * @param applicationType  进件类型（1:个人;2:企业）
     * @param applicationId    系统订单号
     * @param chinaumsAuthInfo 银联认证信息
     * @return TRUE:处理完成,FALSE:处理失败
     * @author huabiao
     * @create 2022/12/8  20:24
     */
    Boolean handleApplicationStatus(String applicationType, String applicationId, ChinaumsAuthInfo chinaumsAuthInfo);

    /**
     * 个人-进件创建
     *
     * @param cusCreateDTO 个人创建DTO
     * @author huabiao
     * @create 2022/12/19  11:49
     */
    void cusCreate(CusCreateDTO cusCreateDTO);

    /**
     * 账户验证
     *
     * @param outRequestNo 平台订单号
     * @return true:成功;false:失败
     * @description
     * @author huabiao
     * @create 2022/12/21  19:47
     */
    Boolean accountValidation(String outRequestNo);

    /**
     * 个人-进件修改
     *
     * @param cusCreateDTO 个人创建DTO
     * @author huabiao
     * @create 2023/2/15  9:55
     */
    void cusUpdate(CusCreateDTO cusCreateDTO);

    /**
     * 支付密码-修改
     *
     * @param passwordUpdateDTO 密码修改DTO
     * @author huabiao
     * @create 2023/3/2  14:52
     */
    void passwordUpdate(PasswordUpdateDTO passwordUpdateDTO);

    /**
     * 支付密码-重置
     *
     * @param passwordResetDTO 密码重置DTO
     * @author huabiao
     * @create 2023/3/2  15:58
     */
    void passwordReset(PasswordResetDTO passwordResetDTO);

    /**
     * 企业-进件修改
     *
     * @param mchCreateDTO 企业创建DTO
     * @author huabiao
     * @create 2023/8/30  9:52
     */
    void mchUpdate(MchCreateDTO mchCreateDTO);

    Boolean handleMchCallBackSuccess(ByxChinaumsCallBackDTO byxChinaumsCallBackDTO);

    ChinaumsAuthInfo changeChinaumsAuthInfoStatus(ByxChinaumsCallBackDTO byxChinaumsCallBackDTO);
}
