/**
 * 系统指标监控相关类型定义
 */

/**
 * 健康检查响应
 */
export interface HealthResponse {
    status: 'UP' | 'DOWN' | 'UNKNOWN';
    components?: {
        db?: {
            status: string;
            details?: Record<string, any>;
        };
        diskSpace?: {
            status: string;
            details?: {
                total: number;
                free: number;
                threshold: number;
            };
        };
        ping?: {
            status: string;
        };
        [key: string]: any;
    };
}

/**
 * Metrics 测量值
 */
export interface Measurement {
    statistic: 'VALUE' | 'COUNT' | 'TOTAL_TIME' | 'MAX' | 'TOTAL';
    value: number;
}

/**
 * Metrics 响应基础结构
 */
export interface MetricResponse {
    name: string;
    description?: string;
    baseUnit?: string;
    measurements: Measurement[];
    availableTags?: Array<{
        tag: string;
        values: string[];
    }>;
}

/**
 * JVM 内存区域详情
 */
export interface MemoryRegion {
    used: number;          // 已使用（字节）
    max: number;           // 最大值（字节）
    committed: number;     // 已分配（字节）
}

/**
 * JVM 内存信息
 */
export interface JvmMemoryInfo {
    heapUsed: number;      // 堆内存使用量（字节）
    heapMax: number;       // 堆内存最大值（字节）
    heapCommitted: number; // 堆内存已分配（字节）
    heapPercent: number;   // 堆内存使用百分比
    nonHeapUsed: number;   // 非堆内存使用量（字节）
    nonHeapMax: number;    // 非堆内存最大值（字节）
    nonHeapCommitted: number; // 非堆内存已分配（字节）
    nonHeapPercent: number; // 非堆内存使用百分比
    // 详细区域信息（可选）
    regions?: {
        eden?: MemoryRegion;       // Eden 区（年轻代）
        oldGen?: MemoryRegion;     // Old Gen（老年代）
        survivor?: MemoryRegion;   // Survivor 区
        metaspace?: MemoryRegion;  // Metaspace（元空间）
    };
}

/**
 * CPU 使用信息
 */
export interface CpuUsageInfo {
    systemCpu: number;     // 系统CPU使用率 (0-1)
    processCpu: number;    // 进程CPU使用率 (0-1)
}

/**
 * 线程信息
 */
export interface ThreadInfo {
    live: number;          // 活跃线程数
    daemon: number;        // 守护线程数
    peak: number;          // 峰值线程数
}

/**
 * 数据库连接池信息
 */
export interface HikariInfo {
    active: number;        // 活跃连接
    idle: number;          // 空闲连接
    max: number;           // 最大连接
    min: number;           // 最小连接
    pending: number;       // 等待连接
    total: number;         // 总连接数
    usagePercent: number;  // 使用率
}

/**
 * GC 统计信息
 */
export interface GcInfo {
    count: number;         // GC 次数
    totalTime: number;     // GC 总耗时（秒）
    maxTime: number;       // 最长GC时间（秒）
    avgTime: number;       // 平均GC时间（毫秒）
}

/**
 * 线程详情
 */
export interface ThreadDetail {
    threadName: string;
    threadId: number;
    threadState: 'RUNNABLE' | 'WAITING' | 'TIMED_WAITING' | 'BLOCKED' | 'NEW' | 'TERMINATED';
    blockedTime: number;
    blockedCount: number;
    waitedTime: number;
    waitedCount: number;
    lockInfo: any;
    lockedMonitors: any[];
    lockedSynchronizers: any[];
    stackTrace: any[];
}

/**
 * 线程转储响应
 */
export interface ThreadDumpResponse {
    threads: ThreadDetail[];
}

/**
 * 线程状态统计
 */
export interface ThreadStateCount {
    RUNNABLE: number;
    WAITING: number;
    TIMED_WAITING: number;
    BLOCKED: number;
    NEW: number;
    TERMINATED: number;
}

/**
 * 系统指标数据（汇总）
 */
export interface SystemMetrics {
    health: HealthResponse;
    memory: JvmMemoryInfo;
    cpu: CpuUsageInfo;
    threads: ThreadInfo;
    hikari: HikariInfo;
    gc: GcInfo;
    threadStates: ThreadStateCount;
    timestamp: number;     // 采集时间戳
}

/**
 * 告警阈值配置
 */
export interface ThresholdConfig {
    cpu: {
        warning: number;
        danger: number;
    };
    memory: {
        warning: number;
        danger: number;
    };
    threadBlocked: {
        warning: number;
        danger: number;
    };
    dbConnections: {
        warning: number;
        danger: number;
    };
}

/**
 * 历史数据点（用于趋势图）
 */
export interface MetricHistoryPoint {
    timestamp: number;
    heapUsed: number;
    heapMax: number;
    cpuUsage: number;
}
