package com.ruoyi.framework.service;

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

import com.ruoyi.framework.domain.DepartmentDataPerformanceMetrics;

/**
 * 部门数据隔离性能监控Service接口
 * 
 * @author ruoyi
 * @date 2025-01-12
 */
public interface IDepartmentDataPerformanceService 
{
    /**
     * 记录性能监控指标
     * 
     * @param metrics 性能指标
     * @return 结果
     */
    public int recordPerformanceMetrics(DepartmentDataPerformanceMetrics metrics);

    /**
     * 查询性能监控指标列表
     * 
     * @param metrics 性能指标查询条件
     * @return 性能指标集合
     */
    public List<DepartmentDataPerformanceMetrics> selectPerformanceMetricsList(DepartmentDataPerformanceMetrics metrics);

    /**
     * 验证部门字段索引是否存在
     * 
     * @param tableName 表名
     * @return 索引验证结果
     */
    public Map<String, Object> verifyDepartmentIndexes(String tableName);

    /**
     * 验证所有目标表的部门索引
     * 
     * @return 所有表的索引验证结果
     */
    public Map<String, Object> verifyAllDepartmentIndexes();

    /**
     * 分析查询性能
     * 
     * @param sql SQL语句
     * @param tableName 表名
     * @return 性能分析结果
     */
    public Map<String, Object> analyzeQueryPerformance(String sql, String tableName);

    /**
     * 获取性能统计报告
     * 
     * @param params 查询参数
     * @return 性能统计报告
     */
    public Map<String, Object> getPerformanceStatistics(Map<String, Object> params);

    /**
     * 获取慢查询列表
     * 
     * @param thresholdMs 慢查询阈值(毫秒)
     * @param limit 限制条数
     * @return 慢查询列表
     */
    public List<DepartmentDataPerformanceMetrics> getSlowQueries(long thresholdMs, int limit);

    /**
     * 获取索引使用率统计
     * 
     * @return 索引使用率统计
     */
    public Map<String, Object> getIndexUsageStatistics();

    /**
     * 检查性能告警
     * 
     * @return 告警信息列表
     */
    public List<Map<String, Object>> checkPerformanceAlerts();

    /**
     * 优化复合索引建议
     * 
     * @param tableName 表名
     * @return 索引优化建议
     */
    public List<Map<String, Object>> getIndexOptimizationSuggestions(String tableName);

    /**
     * 清理过期的性能监控数据
     * 
     * @param retentionDays 保留天数
     * @return 删除的记录数
     */
    public int cleanExpiredPerformanceData(int retentionDays);

    /**
     * 生成性能监控报告
     * 
     * @param params 报告参数
     * @return 报告数据
     */
    public Map<String, Object> generatePerformanceReport(Map<String, Object> params);

    /**
     * 启用性能监控
     */
    public void enablePerformanceMonitoring();

    /**
     * 禁用性能监控
     */
    public void disablePerformanceMonitoring();

    /**
     * 检查性能监控状态
     * 
     * @return 监控状态
     */
    public boolean isPerformanceMonitoringEnabled();
}