package cn.com.taiji.beidou.ship.warning.model.mapper;

import cn.com.taiji.beidou.ship.warning.model.domain.*;
import cn.com.taiji.beidou.ship.warning.rule.domain.*;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Author CHEN
 * @Date 2022/11/15 18:11
 */
@Mapper
public interface ShipWarningModelMapper {


    /**
     * 模型列表
     * @param modelName
     * @param id
     * @return
     */
    List<WarningModelResult> selectModelList(@Param("modelName")String modelName,@Param("id")String id);

    /**
     * 规则列表
     * @param ruleName
     * @param enabled
     * @param id
     * @return
     */
    List<WarningRuleResult> selectRuleList(@Param("ruleName")String ruleName,@Param("enabled") String enabled,@Param("id")String id);

    /**
     * 启用停用
     * @param updateEnabledReq
     * @return
     */
    int updateEnabledById(UpdateEnabledReq updateEnabledReq);

    /**
     * 新增模型参数
     * @param warningParamData
     * @return
     */
    int insertParam(WarningParamData warningParamData);

    /**
     * 新增区域
     * @param warningAreaData
     * @return
     */
    int insertArea(WarningAreaData warningAreaData);

    /**
     * 新增预警模型
     * @param warningModelData
     * @return
     */
    int insertModel(WarningModelData warningModelData);

    /**
     * 新增预警规则
     * @param warningRuleData
     * @return
     */
    int insertRule(WarningRuleData warningRuleData);

    /**
     * 新增模型和区域关联
     * @param id
     * @param modelId
     * @param areaId
     * @param createBy
     * @return
     */
    int insertModelAndArea(@Param("id") String id,
                          @Param("modelId")String modelId,
                          @Param("areaId")String areaId,
                          @Param("createBy")String createBy);

    /**
     * 新增模型和参数关联
     * @param id
     * @param modelId
     * @param paramId
     * @param createBy
     * @return
     */
    int insertModelAndParam(@Param("id") String id,
                          @Param("modelId")String modelId,
                          @Param("paramId")String paramId,
                          @Param("createBy")String createBy);

    /**
     * 新增规则和模型关联
     * @param id
     * @param ruleId
     * @param modelId
     * @param createBy
     * @return
     */
    int insertRuleAndModel(@Param("id") String id,
                           @Param("ruleId")String ruleId,
                          @Param("modelId")String modelId,
                          @Param("createBy")String createBy);

    /**
     * 新增参数字典
     * @param warningParamDictData
     * @return
     */
    int insertParamDict(WarningParamDictData warningParamDictData);

    /**
     * 新增参数和预警规则关系
     * @param id
     * @param ruleId
     * @param paramId
     * @param paramValue
     * @param createBy
     * @return
     */
    int insertRuleAndParam(@Param("id") String id,
                           @Param("ruleId")String ruleId,
                           @Param("paramId")String paramId,
                           @Param("paramValue")String paramValue,
                           @Param("createBy")String createBy);

    /**
     * 获取参数字典列表
     * @return
     */
    List<WarningParamDictData> selectParamDict();

    List<WarningAreaVo> selectAreaList(String areaName);

    int updateParamById(@Param("paramId")String paramId,@Param("paramValue")String paramValue,@Param("userId")String userId);

    /**
     * 查询是否启用
     * @param id
     * @return
     */
    int selectRuleByIdCount(@Param("id")String id);

    int delRuleAndModelByRule(@Param("ruleId")String ruleId);

    int delRuleAndParamByRule(@Param("ruleId")String ruleId);

    int updateRule(WarningRuleData warningRuleData);

    int updateModel(WarningModelData warningModelData);

    /**
     * 根据模型ID删除模型参数关联表
     * @param modelId
     * @return
     */
    int delModelAndParam(@Param("modelId")String modelId);

    /**
     * 根据模型ID删除模型区域关联表
     * @param modelId
     * @return
     */
    int delModelAndArea(@Param("modelId")String modelId);

    int delRule(@Param("id") String id);

    int delModel(@Param("id") String id);

    /**
     * 查看是否有未删除的规则与模型关联关系
     * @param modelId
     * @return
     */
    int selectRuleModelByModelIdCount(@Param("modelId")String modelId);

    /**
     * 查看该模型下是否有正在启用的规则
     * @param modelId
     * @return
     */
    int isEnableByModel(@Param("modelId")String modelId);
    /**
     * 根据模型ID和字典id获取参数
     * @param modelId
     * @param dictId
     * @return
     */
    WarningParamData getParamDataByModelIdAndDictId(@Param("modelId") String modelId,@Param("dictId") String dictId);

    /**
     * 获取模型与规则和参数的关系
     * @param modelId
     * @return
     */
    List<RuleModelParamData> getRuleAndParamByMId(@Param("modelId") String modelId);

    int insertRuleModelParam(RuleModelParamData ruleModelParamData);

    /**
     * 根据model_id删除规则模型参数关系表
     * @param modelId
     * @return
     */
    int delRuleModelParamByMId(String modelId);

    int delRuleModelParamByRId(String ruleId);

    /**
     * 获取规则模型参数的id
     * @param ruleId
     * @param modelId
     * @param paramId
     * @return
     */
    RuleModelParamData getRuleModelParamByRMP(@Param("ruleId") String ruleId,
                                              @Param("modelId") String modelId,
                                              @Param("paramId") String paramId);

    /**
     * 新增规则模型区域关系表
     * @param ruleModelAreaData
     * @return
     */
    int insertRuleModelArea(RuleModelAreaData ruleModelAreaData);

    /**
     * 根据规则ID删除 规则模型区域关系
     * @param ruleId
     * @return
     */
    int delRuleModelAreaByRId(String ruleId);

    /**
     * 预警模型名称是否唯一
     * @param modelName
     * @param id
     * @return
     */
    int selectWarningModelByName(@Param("modelName") String modelName,@Param("id") String id);

    /**
     * 预警规则名称是否唯一
     * @param ruleName
     * @param id
     * @return
     */
    int selectWarningRuleByName(@Param("ruleName")String ruleName,@Param("id")String id);


    /**
     * 根据勾选区域返回对应的区域信息
     * @param ids
     * @return
     */
    List<WarningAreaVo> findInId(String[] ids);
}
