package com.zanxiang.game.module.manage.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zanxiang.game.module.manage.pojo.dto.AgentDTO;
import com.zanxiang.game.module.manage.pojo.dto.TencentNewWebUserActionSetDTO;
import com.zanxiang.game.module.manage.pojo.params.AgentAddParam;
import com.zanxiang.game.module.manage.pojo.params.AgentListParam;
import com.zanxiang.game.module.manage.pojo.vo.AgentAccountChoiceVO;
import com.zanxiang.game.module.manage.pojo.vo.AgentChoiceVO;
import com.zanxiang.game.module.manage.pojo.vo.AgentVO;
import com.zanxiang.game.module.mybatis.entity.Agent;
import reactor.util.function.Tuple2;

import java.util.List;
import java.util.Map;

/**
 * @author wcc
 */
public interface IAgentService extends IService<Agent> {

    /**
     * 列表页面
     *
     * @param param 参数
     * @return {@link IPage}<{@link AgentVO}>
     */
    IPage<AgentVO> listOfPage(AgentListParam param);

    /**
     * 建渠道
     *
     * @param param 参数
     * @return boolean
     */
    boolean add(AgentAddParam param);

    /**
     * 配置将状态
     *
     * @param agentIdList 代理id列表
     * @param putStatus   把状态
     * @return boolean
     */
    boolean configPutStatus(List<Long> agentIdList, Integer putStatus);

    /**
     * 配置支持政策
     *
     * @param agentIdList  代理id列表
     * @param backPolicyId 返回政策id
     * @return boolean
     */
    boolean configBackPolicy(List<Long> agentIdList, Long backPolicyId);

    /**
     * 获取用户渠道列表
     *
     * @param account   账户
     * @param pitcherId 投手id
     * @param agentId   代理人身份证
     * @return {@link Tuple2}<{@link List}<{@link Long}>, {@link List}<{@link AgentDTO}>>
     */
    Tuple2<List<Long>, List<AgentDTO>> getUserAgent(String account, String pitcherId, Long agentId);

    /**
     * 渠道账号选择接口
     *
     * @return {@link List}<{@link AgentAccountChoiceVO}>
     */
    List<AgentAccountChoiceVO> agentAccountChoiceList();

    /**
     * 代理选择列表
     *
     * @return {@link List}<{@link AgentChoiceVO}>
     */
    List<AgentChoiceVO> agentChoiceList();

    /**
     * 通道变换
     *
     * @param channel 通道
     * @return {@link Map}<{@link String}, {@link String}>
     */
    Map<String, String> channelTransform(String channel);

    /**
     * 通过id获取代理
     *
     * @param agentId 代理人身份证
     * @return {@link AgentDTO}
     */
    AgentDTO getAgentById(long agentId);

    Boolean newWebUserActionSet(TencentNewWebUserActionSetDTO dto);
}
