package com.ruoyi.blockchain.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.ruoyi.blockchain.domain.ContractMonitor;

/**
 * 合约监控Mapper接口
 * 
 * @author ruoyi
 * @date 2025-12-19
 */
public interface ContractMonitorMapper {
    
    /**
     * 查询合约监控
     * 
     * @param monitorId 合约监控主键
     * @return 合约监控
     */
    public ContractMonitor selectContractMonitorByMonitorId(Long monitorId);

    /**
     * 根据合约地址查询合约监控
     * 
     * @param contractAddress 合约地址
     * @return 合约监控列表
     */
    public List<ContractMonitor> selectContractMonitorByContractAddress(String contractAddress);

    /**
     * 根据监控名称查询合约监控
     * 
     * @param monitorName 监控名称
     * @return 合约监控
     */
    public ContractMonitor selectContractMonitorByMonitorName(String monitorName);

    /**
     * 根据监控类型查询合约监控
     * 
     * @param monitorType 监控类型
     * @return 合约监控列表
     */
    public List<ContractMonitor> selectContractMonitorByMonitorType(String monitorType);

    /**
     * 根据监控状态查询合约监控
     * 
     * @param monitorStatus 监控状态
     * @return 合约监控列表
     */
    public List<ContractMonitor> selectContractMonitorByMonitorStatus(String monitorStatus);

    /**
     * 查询活跃的合约监控
     * 
     * @return 合约监控列表
     */
    public List<ContractMonitor> selectActiveContractMonitors();

    /**
     * 查询需要检查的合约监控
     * 
     * @return 合约监控列表
     */
    public List<ContractMonitor> selectContractMonitorsForCheck();

    /**
     * 查询合约监控列表
     * 
     * @param contractMonitor 合约监控
     * @return 合约监控集合
     */
    public List<ContractMonitor> selectContractMonitorList(ContractMonitor contractMonitor);

    /**
     * 新增合约监控
     * 
     * @param contractMonitor 合约监控
     * @return 结果
     */
    public int insertContractMonitor(ContractMonitor contractMonitor);

    /**
     * 修改合约监控
     * 
     * @param contractMonitor 合约监控
     * @return 结果
     */
    public int updateContractMonitor(ContractMonitor contractMonitor);

    /**
     * 更新监控状态
     * 
     * @param monitorId 监控ID
     * @param monitorStatus 监控状态
     * @return 结果
     */
    public int updateMonitorStatus(@Param("monitorId") Long monitorId, @Param("monitorStatus") String monitorStatus);

    /**
     * 更新最后检查时间
     * 
     * @param monitorId 监控ID
     * @param lastCheckTime 最后检查时间
     * @return 结果
     */
    public int updateLastCheckTime(@Param("monitorId") Long monitorId, @Param("lastCheckTime") Date lastCheckTime);

    /**
     * 更新告警信息
     * 
     * @param monitorId 监控ID
     * @param alertCount 告警次数
     * @param lastAlertTime 最后告警时间
     * @return 结果
     */
    public int updateAlertInfo(@Param("monitorId") Long monitorId, 
                               @Param("alertCount") Integer alertCount,
                               @Param("lastAlertTime") Date lastAlertTime);

    /**
     * 停止监控
     * 
     * @param monitorId 监控ID
     * @param endTime 结束时间
     * @return 结果
     */
    public int stopMonitor(@Param("monitorId") Long monitorId, @Param("endTime") Date endTime);

    /**
     * 删除合约监控
     * 
     * @param monitorId 合约监控主键
     * @return 结果
     */
    public int deleteContractMonitorByMonitorId(Long monitorId);

    /**
     * 批量删除合约监控
     * 
     * @param monitorIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteContractMonitorByMonitorIds(Long[] monitorIds);

    /**
     * 根据合约地址删除合约监控
     * 
     * @param contractAddress 合约地址
     * @return 结果
     */
    public int deleteContractMonitorByContractAddress(String contractAddress);

    /**
     * 校验监控名称是否唯一
     * 
     * @param monitorName 监控名称
     * @return 结果
     */
    public ContractMonitor checkMonitorNameUnique(String monitorName);
}