package com.xinelu.manage.mapper.scriptInfo;

import com.xinelu.manage.domain.scriptInfo.ScriptInfo;
import com.xinelu.manage.dto.script.ScriptInfoDto;
import com.xinelu.manage.vo.scriptInfo.ScriptVO;
import java.util.List;
import org.apache.ibatis.annotations.Param;

/**
 * 话术信息Mapper接口
 *
 * @author xinelu
 * @date 2024-02-26
 */
public interface ScriptInfoMapper {
    /**
     * 查询话术信息
     *
     * @param id 话术信息主键
     * @return 话术信息
     */
    public ScriptInfo selectScriptInfoById(Long id);

    /**
     * 查询话术信息列表
     *
     * @param scriptInfo 话术信息
     * @return 话术信息集合
     */
     List<ScriptInfo> selectScriptInfoList(ScriptInfoDto scriptInfo);

    /**
     * 新增话术信息
     *
     * @param scriptInfo 话术信息
     * @return 结果
     */
    public int insertScriptInfo(ScriptInfo scriptInfo);

    /**
     * 修改话术信息
     *
     * @param scriptInfo 话术信息
     * @return 结果
     */
    public int updateScriptInfo(ScriptInfo scriptInfo);

    /**
     * 删除话术信息
     *
     * @param id 话术信息主键
     * @return 结果
     */
    public int deleteScriptInfoById(Long id);

    /**
     * 批量删除话术信息
     *
     * @param ids 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteScriptInfoByIds(Long[] ids);

    /**
     * 判断通用话术名称是否存在
     */
    int countByScriptInfo(ScriptInfo scriptInfo);

    /**
     * 检查是否存在除当前记录之外的同名记录
     */
    int countByScriptNameExcludingId(@Param("scriptName") String scriptName, @Param("departmentId") Long departmentId, @Param("id") Long id, @Param("commonScriptName") String commonScriptName);


    ScriptVO selectScriptEdgeNode(Long id);

    List<Long> selectScriptInfoEdgeIds(Long id);

    List<Long> selectScriptInfoNodeIds(Long id);

    int deleteScriptInfoNode(Long id);

    int deleteScriptInfoEdge(Long id);


    /**
     * 查询话术信息列表
     * @return 话术信息集合
     */
    List<ScriptInfo> selectScriptInfos();

    /**
     * 根据机器人编号查询变量信息
     *
     * @param robotPublishId
     * @return String
     */
    String selectVariablesByRobotPublishId(String robotPublishId);
}
