package com.ruoyi.monitor.service;

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

import com.ruoyi.monitor.domain.AuditLog;

/**
 * 审计日志Service接口
 * 
 * @author ruoyi
 * @date 2024-12-19
 */
public interface IAuditLogService 
{
    /**
     * 查询审计日志
     * 
     * @param logId 审计日志主键
     * @return 审计日志
     */
    public AuditLog selectAuditLogByLogId(Long logId);

    /**
     * 查询审计日志列表
     * 
     * @param auditLog 审计日志
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogList(AuditLog auditLog);

    /**
     * 新增审计日志
     * 
     * @param auditLog 审计日志
     * @return 结果
     */
    public int insertAuditLog(AuditLog auditLog);

    /**
     * 修改审计日志
     * 
     * @param auditLog 审计日志
     * @return 结果
     */
    public int updateAuditLog(AuditLog auditLog);

    /**
     * 批量删除审计日志
     * 
     * @param logIds 需要删除的审计日志主键集合
     * @return 结果
     */
    public int deleteAuditLogByLogIds(Long[] logIds);

    /**
     * 删除审计日志信息
     * 
     * @param logId 审计日志主键
     * @return 结果
     */
    public int deleteAuditLogByLogId(Long logId);

    /**
     * 记录操作日志
     * 
     * @param operationType 操作类型
     * @param operationModule 操作模块
     * @param operationDescription 操作描述
     * @param businessId 业务ID
     * @param businessType 业务类型
     * @param dataBefore 变更前数据
     * @param dataAfter 变更后数据
     */
    public void recordOperation(String operationType, String operationModule, 
                               String operationDescription, String businessId, 
                               String businessType, String dataBefore, String dataAfter);

    /**
     * 记录操作日志（带风险等级）
     * 
     * @param operationType 操作类型
     * @param operationModule 操作模块
     * @param operationDescription 操作描述
     * @param businessId 业务ID
     * @param businessType 业务类型
     * @param dataBefore 变更前数据
     * @param dataAfter 变更后数据
     * @param riskLevel 风险等级
     */
    public void recordOperation(String operationType, String operationModule, 
                               String operationDescription, String businessId, 
                               String businessType, String dataBefore, String dataAfter,
                               String riskLevel);

    /**
     * 根据用户ID查询审计日志
     * 
     * @param userId 用户ID
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogByUserId(Long userId);

    /**
     * 根据业务ID和业务类型查询审计日志
     * 
     * @param businessId 业务ID
     * @param businessType 业务类型
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogByBusiness(String businessId, String businessType);

    /**
     * 根据操作类型查询审计日志
     * 
     * @param operationType 操作类型
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogByOperationType(String operationType);

    /**
     * 查询审计日志统计信息
     * 
     * @param params 查询参数
     * @return 统计结果
     */
    public List<Map<String, Object>> selectAuditLogStatistics(Map<String, Object> params);

    /**
     * 根据风险等级查询审计日志
     * 
     * @param riskLevel 风险等级
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogByRiskLevel(String riskLevel);

    /**
     * 查询指定时间范围内的审计日志
     * 
     * @param params 查询参数(包含开始时间和结束时间)
     * @return 审计日志集合
     */
    public List<AuditLog> selectAuditLogByTimeRange(Map<String, Object> params);

    /**
     * 清理过期的审计日志
     * 
     * @param retentionDays 保留天数
     * @return 删除的记录数
     */
    public int cleanExpiredAuditLogs(int retentionDays);

    /**
     * 分析审计日志，检测异常操作
     * 
     * @param params 分析参数
     * @return 异常操作列表
     */
    public List<AuditLog> analyzeAnomalousOperations(Map<String, Object> params);

    /**
     * 生成审计报告
     * 
     * @param params 报告参数
     * @return 报告数据
     */
    public Map<String, Object> generateAuditReport(Map<String, Object> params);
}