package com.ytpm.dao;

import com.ytpm.agent.view.AgentAppClassView;
import com.ytpm.risk.model.YtRiskConfig;
import com.ytpm.risk.model.YtRiskTemplate;
import com.ytpm.risk.param.RiskBannedListParam;
import com.ytpm.risk.param.RiskConfigParam;
import com.ytpm.risk.view.RiskBannedListView;
import com.ytpm.risk.view.RiskConfigListView;
import com.ytpm.risk.view.RiskTemplateView;
import org.apache.ibatis.annotations.Param;
import org.mapstruct.Mapper;

import java.util.List;

@Mapper
public interface RiskConfigMapper {
    /**
     * 批量插入
     */
    void insertAll(@Param("configs") List<YtRiskConfig> configs);

    /**
     * 获取风控配置列表
     */
    List<RiskConfigListView> getRiskConfigList(RiskConfigParam param);

    /**
     * 查询风控配置模板
     */
    YtRiskTemplate selectOneTemplate(@Param("templateId")String templateId);

    /**
     * 修改风控模板
     */
    void updateByTempId(YtRiskTemplate newTemp);
    /**
     * 保存风控配置模板
     */
    void saveTemplate(YtRiskTemplate template);

    /**
     * 风控配置模板详情
     */
    RiskTemplateView getTemplateView(@Param("templateId") String templateId, @Param("channelId") String channelId);

    /**
     * 根据APP获取配置模版详情
     */
    RiskTemplateView getAppConfig(@Param("appId") String appId);

    /**
     * 修改配置值
     */
    void updateConfigVal(YtRiskConfig config);

    /**
     * 新增模版关联配置
     */
    void addRelease(@Param("templateId") String templateId, @Param("configIds") List<String> configIds,
                    @Param("operator") String operator, @Param("operatorName") String operatorName);

    /**
     * 根据应用获取配置类
     */
    List<AgentAppClassView> getAppClazz(@Param("appIds") String appIds);

    /**
     * 根据风控编码获取风控配置
     */
    RiskTemplateView getByCode(@Param("riskCode") String riskCode);

    /**
     * 根据应用ID获取应用所有者
     */
    String getApplicationOwner(@Param("appId") String appId);

    /**
     * 根据effect_node 获取不同业务节点风控规则
     */
    RiskTemplateView getByNode(@Param("effectNode") Integer effectNode);

    /**
     * 根据应用ID查询用户自定义的风控配置模版
     * @param appId 应用ID
     * @param effectNode 业务节点
     */
    List<RiskTemplateView> getCustomTempConfig(@Param("appId") String appId,@Param("effectNode")Integer effectNode);

    /**
     * 根据应用获取风控配置
     */
    List<RiskTemplateView> getTemplateByAppId(@Param("appId") String appId);
}
