/**
 * Compatibility Matrix Types
 *
 * Type definitions for plugin-to-plugin compatibility tracking.
 *
 * @since v1.66.0
 */
/**
 * Types of plugin conflicts
 */
export type ConflictType = 'api_conflict' | 'event_conflict' | 'command_conflict' | 'permission_conflict' | 'resource_conflict' | 'version_mismatch' | 'load_order' | 'incompatible';
/**
 * Compatibility status between two plugins
 */
export type CompatibilityStatus = 'compatible' | 'potential_issues' | 'known_conflict' | 'requires_config' | 'unknown';
/**
 * Plugin-to-plugin conflict definition
 */
export interface PluginConflict {
    /** Unique conflict ID */
    id: string;
    /** Type of conflict */
    type: ConflictType;
    /** First plugin involved */
    pluginA: string;
    /** Second plugin involved */
    pluginB: string;
    /** Conflict severity */
    severity: 'critical' | 'warning' | 'info';
    /** Human-readable description */
    description: string;
    /** Specific features affected */
    affectedFeatures?: string[];
    /** Version ranges where conflict occurs */
    affectedVersions?: {
        pluginA?: string;
        pluginB?: string;
    };
    /** Workaround if any */
    workaround?: string;
    /** Resolution steps */
    resolution?: string;
    /** Data source */
    source: 'database' | 'analysis' | 'user_report';
    /** When the conflict was reported/detected */
    reportedAt: number;
}
/**
 * Compatibility matrix entry
 */
export interface CompatibilityEntry {
    /** First plugin */
    pluginA: string;
    /** Second plugin */
    pluginB: string;
    /** Overall compatibility status */
    status: CompatibilityStatus;
    /** Compatibility score (0-100, 100 = fully compatible) */
    score: number;
    /** Conflicts between these plugins */
    conflicts: PluginConflict[];
    /** Notes about the compatibility */
    notes?: string;
    /** Last updated timestamp */
    lastUpdated: number;
}
/**
 * Full compatibility matrix
 */
export interface CompatibilityMatrix {
    /** Matrix entries indexed by "pluginA:pluginB" */
    entries: Map<string, CompatibilityEntry>;
    /** All known plugins in the matrix */
    plugins: string[];
    /** When the matrix was generated */
    generatedAt: number;
    /** Total number of entries */
    totalEntries: number;
    /** Number of known conflicts */
    conflictCount: number;
}
/**
 * Compatibility matrix summary
 */
export interface CompatibilityMatrixSummary {
    /** Total plugins analyzed */
    totalPlugins: number;
    /** Total compatibility entries */
    totalEntries: number;
    /** Count by status */
    byStatus: Record<CompatibilityStatus, number>;
    /** All active conflicts */
    conflicts: PluginConflict[];
    /** Plugins with most conflicts */
    problematicPlugins: Array<{
        plugin: string;
        conflictCount: number;
        severityBreakdown: Record<'critical' | 'warning' | 'info', number>;
    }>;
    /** Overall compatibility score */
    overallScore: number;
    /** When generated */
    generatedAt: number;
}
/**
 * Dependency graph node
 */
export interface DependencyNode {
    /** Plugin name */
    plugin: string;
    /** Hard dependencies */
    hardDeps: string[];
    /** Soft dependencies */
    softDeps: string[];
    /** Plugins that depend on this one */
    dependents: string[];
    /** Health score of this plugin */
    healthScore?: number;
    /** Whether this plugin is installed */
    installed: boolean;
}
/**
 * Dependency graph representing all plugin relationships
 */
export interface DependencyGraph {
    /** All nodes in the graph */
    nodes: Map<string, DependencyNode>;
    /** Detected circular dependencies */
    cycles: string[][];
    /** Missing dependencies */
    missing: Array<{
        plugin: string;
        requiredBy: string[];
        type: 'hard' | 'soft';
    }>;
    /** Total plugins */
    totalPlugins: number;
    /** Total edges (dependencies) */
    totalEdges: number;
}
/**
 * Conflict resolution suggestion
 */
export interface ConflictResolution {
    /** Conflict being resolved */
    conflictId: string;
    /** Suggested resolution approach */
    approach: 'update' | 'configure' | 'replace' | 'remove' | 'load_order';
    /** Detailed steps */
    steps: string[];
    /** Estimated effort */
    effort: 'low' | 'medium' | 'high';
    /** Success likelihood */
    successLikelihood: 'high' | 'medium' | 'low';
    /** Whether this can be automated */
    automatable: boolean;
    /** Automation action if applicable */
    automationAction?: string;
}
/**
 * Compatibility report for a set of plugins
 */
export interface CompatibilityReport {
    /** Server or configuration name */
    name: string;
    /** Plugins analyzed */
    plugins: string[];
    /** Compatibility matrix */
    matrix: CompatibilityMatrix;
    /** Matrix summary */
    summary: CompatibilityMatrixSummary;
    /** Dependency graph */
    dependencyGraph: DependencyGraph;
    /** Suggested resolutions for conflicts */
    resolutions: ConflictResolution[];
    /** Overall risk assessment */
    riskLevel: 'low' | 'medium' | 'high' | 'critical';
    /** Risk factors */
    riskFactors: string[];
    /** Recommendations */
    recommendations: string[];
    /** Report generation time */
    generatedAt: number;
}
/**
 * Known conflict database entry
 */
export interface KnownConflictEntry {
    /** Plugins involved (can be 2+) */
    plugins: string[];
    /** Conflict type */
    type: ConflictType;
    /** Severity */
    severity: 'critical' | 'warning' | 'info';
    /** Description */
    description: string;
    /** Affected versions */
    affectedVersions?: Record<string, string>;
    /** Workaround */
    workaround?: string;
    /** Fixed in versions */
    fixedInVersions?: Record<string, string>;
    /** Reference URL */
    referenceUrl?: string;
    /** When this was added to the database */
    addedAt: number;
    /** Last verified */
    lastVerified?: number;
}
/**
 * Configuration for compatibility checking
 */
export interface CompatibilityCheckConfig {
    /** Include analysis-based detection */
    analyzeApis: boolean;
    /** Include command conflict detection */
    analyzeCommands: boolean;
    /** Include permission conflict detection */
    analyzePermissions: boolean;
    /** Check load order requirements */
    checkLoadOrder: boolean;
    /** Include user-reported conflicts */
    includeUserReports: boolean;
    /** Minimum confidence for analysis results */
    minConfidence: number;
}
/**
 * Default compatibility check configuration
 */
export declare const DEFAULT_COMPATIBILITY_CONFIG: CompatibilityCheckConfig;
//# sourceMappingURL=compatibility-types.d.ts.map