package com.jsowell.pile.service;

import com.jsowell.pile.domain.PileMerchantInfo;
import com.jsowell.pile.dto.CreateMerchantDTO;
import com.jsowell.pile.dto.QueryMerchantInfoDTO;
import com.jsowell.pile.vo.base.MerchantInfoVO;
import com.jsowell.pile.vo.web.MerchantSettleInfoVO;
import com.jsowell.pile.vo.web.PileMerchantInfoVO;

import java.util.List;

/**
 * 充电桩运营商信息Service接口
 *
 * @author jsowell
 * @date 2022-08-27
 */
public interface PileMerchantInfoService {
	/**
	 * 查询充电桩运营商信息
	 *
	 * @param id 充电桩运营商信息主键
	 * @return 充电桩运营商信息
	 */
	public PileMerchantInfo selectPileMerchantInfoById(Long id);

    PileMerchantInfo selectPileMerchantInfoById(String merchantId);

    /**
	 * 查询充电桩运营商信息列表
	 *
	 * @param pileMerchantInfo 充电桩运营商信息
	 * @return 充电桩运营商信息集合
	 */
	List<PileMerchantInfo> selectPileMerchantInfoListWithAuth(PileMerchantInfo pileMerchantInfo);

	List<PileMerchantInfo> pagePileMerchantInfoListWithAuth(PileMerchantInfo pileMerchantInfo);

	List<PileMerchantInfo> selectPileMerchantInfoList(PileMerchantInfo pileMerchantInfo);

	List<PileMerchantInfo> selectPileMerchantInfoListByIdList(List<String> merchantIdList);

    /**
	 * 新增充电桩运营商信息
	 *
	 * @param pileMerchantInfo 充电桩运营商信息
	 * @return 结果
	 */
	public int insertPileMerchantInfo(CreateMerchantDTO pileMerchantInfo);

	/**
	 * 修改充电桩运营商信息
	 *
	 * @param pileMerchantInfo 充电桩运营商信息
	 * @return 结果
	 */
	public int updatePileMerchantInfo(PileMerchantInfo pileMerchantInfo);

	/**
	 * 批量删除充电桩运营商信息
	 *
	 * @param ids 需要删除的充电桩运营商信息主键集合
	 * @return 结果
	 */
	public int deletePileMerchantInfoByIds(Long[] ids);

	/**
	 * 删除充电桩运营商信息信息
	 *
	 * @param id 充电桩运营商信息主键
	 * @return 结果
	 */
	public int deletePileMerchantInfoById(Long id);

	/**
	 * 根据微信appId查询一级运营商信息
	 * @param wxAppId 微信appId
	 * @return
	 */
    PileMerchantInfo getFirstLevelMerchantByWxAppId(String wxAppId);

	/**
	 * 根据支付宝appId查询一级运营商信息
	 * @param alipayAppId 微信appId
	 * @return
	 */
	PileMerchantInfo getFirstLevelMerchantByAlipayAppId(String alipayAppId);

	/**
	 * 通过微信小程序appId查询一级运营商merchantId
	 * @param wechatAppId 微信小程序appId
	 * @return 一级运营商merchantId
	 */
	String getFirstLevelMerchantIdByWxAppId(String wechatAppId);

	/**
	 * 通过支付宝小程序appId查询一级运营商merchantId
	 * @param alipayAppId 微信小程序appId
	 * @return 一级运营商merchantId
	 */
	String getFirstLevelMerchantIdByAliAppId(String alipayAppId);

	MerchantInfoVO getMerchantInfoVO(String merchantId);

	/**
	 * 根据运营商部门ids 查询所有站点id
	 * @param merchantDeptIds
	 * @return
	 */
	List<String> queryByMerchantDeptIds(List<String> merchantDeptIds);

	PileMerchantInfo queryInfoByDeptId(String deptId);

	MerchantInfoVO queryMerchantInfoVOByDeptId(String deptId);

	/**
	 * 通过ids查询信息列表
	 * @param dto
	 * @return
	 */
	List<MerchantSettleInfoVO> queryMerchantInfoListByAuth(QueryMerchantInfoDTO dto);

	/**
	 * 查询一级运营商列表
	 * @return
	 */
    List<PileMerchantInfo> queryFirstLevelMerchantList();

    String queryAppIdByMerchantId(String merchantId);

	/**
	 * 通过appid获取运营商部门id
	 * @param appId
	 * @return
	 */
	List<String> getDeptIdsByAppId(String appId);

    // @Override
    // public String getDelayModeByWechatAppId(String wechatAppId) {
    // 	PileMerchantInfo merchant = getFirstLevelMerchantByAppId(wechatAppId);
    // 	if (merchant != null) {
    // 		String delayMode = merchant.getDelayMode();
    // 		if (StringUtils.equals(delayMode, Constants.ONE)) {
    // 			return Constants.ADAPAY_PAY_MODE_DELAY;
    // 		}
    // 	}
    // 	return null;
    // }

    String getDelayModeByAppIdAndRequestSource(String appId, String requestSource);

    /**
	 * 通过wechatAppId查询一级运营商的延时支付模式配置
	 * @param wechatAppId 微信小程序id
	 * @return 延时分账模式（0-不延时；1-延时分账）
	 */
    String getDelayModeByWechatAppId(String wechatAppId);

	String getDelayModeByAlipayAppId(String alipayAppId);

	/**
	 * 通过运营商id查询一级运营商配置的delayMode
	 * @param merchantId 运营商id
	 * @return 延时分账模式（0-不延时；1-延时分账）
	 */
    String getDelayModeByMerchantId(String merchantId);

    /**
	 * 通过merchantId获取一级运营商信息
	 */
	PileMerchantInfo getFirstLevelMerchantByMerchantId(String merchantId);

	/**
	 * 通过merchantId获取一级运营商id
	 */
	String getFirstLevelMerchantIdByMerchantId(String merchantId);

	// 查询全部生效的运营商
    List<MerchantInfoVO> selectAll();

	// 查询一级运营商下属的二级运营商
	List<MerchantInfoVO> selectListByFirstMerchant(String firstMerchantId);

	/**
	 * 通过站点id查询运营商基本信息
	 * @param stationId
	 * @return
	 */
	PileMerchantInfoVO queryMerchantInfoByStationId(String stationId);
}
