package cn.pluss.platform;

import cn.pluss.platform.entity.IdCard;
import cn.pluss.platform.mapper.IdCardMapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * <p>
 * 身份证信息表, 图片信息在tb_pluss_merchant_image表中 服务类
 * </p>
 *
 * @author Djh
 * @since 2020-10-16
 */
public interface IdCardService extends IService<IdCard> {

    default int getAgentCount(String certNo, String userId) {
        return ((IdCardMapper) getBaseMapper()).selectAgentCount(certNo, userId);
    }

    /**
     * 获取实名的身份证信息
     * @param userId 用户id
     * @return  身份证信息
     */
    IdCard getCertIdCard(Object userId);

    /**
     * 获取进件法人的身份证信息
     * @param userId 用户id
     * @return  身份证信息
     */
    IdCard getLegalIdCard(String userId);

    /**
     * 保存法人身份证信息
     * @param entity    身份证信息
     */
    boolean apiSaveLegalIdCard(IdCard entity);

    /**
     * 保存实名身份证信息
     * @param entity    身份证信息
     * @return
     */
    boolean apiSaveCertIdCard(IdCard entity);

    /**
     * 获取结算人身份证信息
     * @param userId
     * @param merchantType  商户类型
     * @return
     */
    IdCard getReckonerIdCard(String userId, String merchantType);

    /**
     * 法人信息为空的时候，将实名身份信息作为法人身份信息存储
     * 法人身份部位空时，则检验身份与实名身份是否是同一身份，若不匹配，则将实名身份作为法人身份替换保存
     * @param userId        用户id
     * @return              保存的法人身份信息
     */
    IdCard createLegalIdCard(String userId);

    /**
     * 获取结算人信息
     * @param userId    用户id
     * @return  结算身份证
     */
    default IdCard getBalanceIdCard(String userId) {
        IdCard idCard = new IdCard();
        idCard.setUserType(IdCard.TYPE_ACCOUNT);
        idCard.setUserId(userId);

        return getOne(new QueryWrapper<>(idCard).last("limit 1"));
    }

    /**
     * 获取结算身份证
     * @return
     */
    default List<IdCard> getAccountIdCard(String userId) {
        return ((IdCardMapper) getBaseMapper()).getAccountIdCard(userId);
    }

    /**
     * 获取结算身份证
     * @return
     */
    default IdCard getAccountIdCard(String userId, String channelType) {
        return ((IdCardMapper) getBaseMapper()).getAccountIdCard(userId, channelType);
    }

    /**
     * 获取未关联结算信息的对私结算身份证信息
     * @param userId    用户id
     * @return  身份证信息
     */
    default IdCard getUnusedIdCard(String userId) {
        return ((IdCardMapper) getBaseMapper()).getUnusedIdCard(userId);
    }

    IdCard apiGetFaceCertInfo();
}
