package org.dromara.payment.sys.service;

import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.payment.common.domain.BusAccounts;
import org.dromara.payment.sys.domain.SysSydSignContent;
import org.dromara.payment.sys.domain.bo.SysSydBo;
import org.dromara.payment.sys.domain.vo.SelectSydVo;
import org.dromara.payment.sys.domain.vo.SysSydVo;
import org.dromara.settlement.api.domain.SignZhifubao;

import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.function.Function;

/**
 * 服务商Service接口
 *
 * @author LionLi
 * @date 2024-03-26
 */
public interface ISysSydService {

    /**
     * 查询服务商
     */
    SysSydVo queryById(Long id);

    /**
     * 查询服务商列表
     */
    TableDataInfo<SysSydVo> queryPageList(SysSydBo bo, PageQuery pageQuery);

    /**
     * 查询服务商列表
     */
    List<SysSydVo> queryList(SysSydBo bo);

    /**
     * 新增服务商
     */
    Boolean insertByBo(SysSydBo bo) throws Exception;

    /**
     * 修改服务商
     */
    Boolean updateByBo(SysSydBo bo);

    /**
     * 校验并批量删除服务商信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 开通服务商虚拟户
     * @param id
     * @param gsmc
     * @return
     */
    public Boolean creatSydXNnum(Long id, String gsmc);

    /**
     * 开通虚拟户
     * @param sydId 服务商id
     * @param unitId 单位id
     * @param gsmc 虚拟户名称
     * @param roleType 虚拟户角色id(5：平台 6：服务商 7：运营商 8：代理商 9：商户)
     * @param addRoleType 经办角色id(5：平台 6：服务商 7：运营商 8：代理商 9：商户)
     * @param saveFun<添加的虚拟户，业务资金账户是否添加成功>
     * @param existsFun<验证的虚拟户类型，已存在的虚拟户卡号>
     * @return
     */
    public Boolean creatXNnum(Long sydId, Long unitId, String gsmc, int roleType, int addRoleType, Function<BusAccounts,Boolean> saveFun, Function<String,String> existsFun);

    /**
     * 验证是否配置结算中心
     * @author 张涛
     * @date 2021年9月9日
     * @param sydId 结算中心id
     * @return
     */
    public Map<String, String> valiConfig(Long sydId,String passage);

    /**
     * 获取结算中心的自雇者签约信息
     * @author 张涛
     * @date 2022年9月8日
     * @param sydId 结算中心id
     * @return
     */
    public SysSydSignContent getWorkerSignInfo(int sydId);

    /**
     * 保存结算中心的自雇者签约信息
     * @author 张涛
     * @date 2022年9月8日
     * @param sydId 结算中心id
     * @return
     */
    public Boolean saveWorkerSignInfo(SysSydSignContent sign);

    /**
     * 获取结算中心的支付宝签约信息
     * @author 张涛
     * @date 2022年9月8日
     * @param sydId 结算中心id
     * @return
     */
    public SignZhifubao getSignInfo(Long sydId,String passage);

    /**
     * 根据用户名查询商户可用的服务商
     * @param userName 用户名
     * @return
     */
    public List<SelectSydVo> getSydByUserName(String userName);

    /**
     * 查询商户可用的服务商
     * @param merId 商户id
     * @return
     */
    public List<SelectSydVo> selectSydByMerId(Long merId);



}
