package com.ruoyi.credit.service;

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

import com.ruoyi.credit.domain.ValidationLog;

/**
 * 验证日志Service接口
 * 
 * @author ruoyi
 * @date 2025-12-31
 */
public interface IValidationLogService 
{
    /**
     * 查询验证日志
     * 
     * @param logId 验证日志主键
     * @return 验证日志
     */
    public ValidationLog selectValidationLogByLogId(Long logId);

    /**
     * 查询验证日志列表
     * 
     * @param validationLog 验证日志
     * @return 验证日志集合
     */
    public List<ValidationLog> selectValidationLogList(ValidationLog validationLog);

    /**
     * 根据验证记录ID查询日志
     * 
     * @param validationId 验证记录ID
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByValidationId(Long validationId);

    /**
     * 根据贷款ID查询日志
     * 
     * @param loanId 贷款ID
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByLoanId(Long loanId);

    /**
     * 根据时间范围查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRange(Date startTime, Date endTime);

    /**
     * 根据日志级别查询日志
     * 
     * @param logLevel 日志级别
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByLevel(String logLevel);

    /**
     * 根据日志类型查询日志
     * 
     * @param logType 日志类型
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByType(String logType);

    /**
     * 根据时间范围和日志级别查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param logLevel 日志级别
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRangeAndLevel(Date startTime, Date endTime, String logLevel);

    /**
     * 根据时间范围和日志类型查询日志
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param logType 日志类型
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByTimeRangeAndType(Date startTime, Date endTime, String logType);

    /**
     * 根据操作用户查询日志
     * 
     * @param operatorUser 操作用户
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByOperatorUser(String operatorUser);

    /**
     * 根据执行步骤查询日志
     * 
     * @param executionStep 执行步骤
     * @return 验证日志集合
     */
    public List<ValidationLog> selectLogsByExecutionStep(String executionStep);

    /**
     * 查询异常日志
     * 
     * @return 验证日志集合
     */
    public List<ValidationLog> selectExceptionLogs();

    /**
     * 查询性能警告日志
     * 
     * @param minDuration 最小执行时长
     * @return 验证日志集合
     */
    public List<ValidationLog> selectPerformanceWarningLogs(Long minDuration);

    /**
     * 新增验证日志
     * 
     * @param validationLog 验证日志
     * @return 结果
     */
    public int insertValidationLog(ValidationLog validationLog);

    /**
     * 批量新增验证日志
     * 
     * @param validationLogs 验证日志列表
     * @return 结果
     */
    public int batchInsertValidationLog(List<ValidationLog> validationLogs);

    /**
     * 修改验证日志
     * 
     * @param validationLog 验证日志
     * @return 结果
     */
    public int updateValidationLog(ValidationLog validationLog);

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

    /**
     * 删除验证日志信息
     * 
     * @param logId 验证日志主键
     * @return 结果
     */
    public int deleteValidationLogByLogId(Long logId);

    /**
     * 根据验证记录ID删除日志
     * 
     * @param validationId 验证记录ID
     * @return 结果
     */
    public int deleteLogsByValidationId(Long validationId);

    /**
     * 根据贷款ID删除日志
     * 
     * @param loanId 贷款ID
     * @return 结果
     */
    public int deleteLogsByLoanId(Long loanId);

    /**
     * 根据时间范围删除日志
     * 
     * @param endTime 结束时间
     * @return 结果
     */
    public int deleteLogsByTimeRange(Date endTime);

    /**
     * 统计日志数量
     * 
     * @param validationLog 查询条件
     * @return 日志数量
     */
    public int countValidationLogs(ValidationLog validationLog);

    /**
     * 统计各级别日志数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    public List<Map<String, Object>> countLogsByLevel(Date startTime, Date endTime);

    /**
     * 统计各类型日志数量
     * 
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 统计结果
     */
    public List<Map<String, Object>> countLogsByType(Date startTime, Date endTime);

    /**
     * 记录验证开始日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param operatorUser 操作用户
     * @param clientIp 客户端IP
     */
    public void logValidationStart(Long loanId, Long validationId, String operatorUser, String clientIp);

    /**
     * 记录验证步骤日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param step 执行步骤
     * @param message 日志消息
     * @param details 详细信息
     * @param duration 执行时长
     * @param operatorUser 操作用户
     */
    public void logValidationStep(Long loanId, Long validationId, String step, String message, String details, Long duration, String operatorUser);

    /**
     * 记录验证成功日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param message 日志消息
     * @param details 详细信息
     * @param totalDuration 总执行时长
     * @param operatorUser 操作用户
     */
    public void logValidationSuccess(Long loanId, Long validationId, String message, String details, Long totalDuration, String operatorUser);

    /**
     * 记录验证失败日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param message 日志消息
     * @param failureReason 失败原因
     * @param totalDuration 总执行时长
     * @param operatorUser 操作用户
     */
    public void logValidationFailure(Long loanId, Long validationId, String message, String failureReason, Long totalDuration, String operatorUser);

    /**
     * 记录验证错误日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param message 日志消息
     * @param exception 异常信息
     * @param operatorUser 操作用户
     */
    public void logValidationError(Long loanId, Long validationId, String message, Exception exception, String operatorUser);

    /**
     * 记录缓存操作日志
     * 
     * @param loanId 贷款ID
     * @param operation 操作类型
     * @param message 日志消息
     * @param details 详细信息
     * @param operatorUser 操作用户
     */
    public void logCacheOperation(Long loanId, String operation, String message, String details, String operatorUser);

    /**
     * 记录通知发送日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param notificationType 通知类型
     * @param message 日志消息
     * @param success 是否成功
     * @param operatorUser 操作用户
     */
    public void logNotificationSent(Long loanId, Long validationId, String notificationType, String message, boolean success, String operatorUser);

    /**
     * 记录性能警告日志
     * 
     * @param loanId 贷款ID
     * @param validationId 验证记录ID
     * @param operation 操作类型
     * @param duration 执行时长
     * @param threshold 阈值
     * @param operatorUser 操作用户
     */
    public void logPerformanceWarning(Long loanId, Long validationId, String operation, Long duration, Long threshold, String operatorUser);
}