/**
 * Profile Types
 *
 * Type definitions for plugin profiles (server configurations).
 *
 * @since v1.33.0
 */
import type { PluginSourceType } from '../types/plugin.js';
/**
 * Profile store version
 */
export declare const PROFILE_STORE_VERSION = "1.0";
/**
 * Available profile colors
 */
export type ProfileColor = 'red' | 'orange' | 'yellow' | 'green' | 'blue' | 'purple' | 'pink' | 'gray';
/**
 * Plugin configuration within a profile
 */
export interface ProfilePlugin {
    /** Plugin name */
    name: string;
    /** Source type */
    source: PluginSourceType;
    /** Source-specific ID */
    sourceId?: string;
    /** Locked version (if any) */
    version?: string;
    /** Version constraint (e.g., ">=5.4.0", "~5.4.0") */
    versionConstraint?: string;
    /** Whether the plugin is enabled */
    enabled: boolean;
    /** Whether auto-update is enabled */
    autoUpdate: boolean;
    /** Tag IDs assigned to this plugin */
    tags?: string[];
    /** Group ID this plugin belongs to */
    group?: string;
}
/**
 * Tag configuration within a profile
 */
export interface ProfileTag {
    id: string;
    name: string;
    color: string;
    isSystem?: boolean;
}
/**
 * Tags store within a profile
 */
export interface ProfileTagStore {
    tags: ProfileTag[];
    assignments: Array<{
        pluginName: string;
        tagIds: string[];
    }>;
}
/**
 * Group configuration within a profile
 */
export interface ProfileGroup {
    id: string;
    name: string;
    color?: string;
    icon?: string;
    plugins: string[];
    order: number;
}
/**
 * Groups store within a profile
 */
export interface ProfileGroupStore {
    groups: ProfileGroup[];
}
/**
 * Favorites store within a profile
 */
export interface ProfileFavoritesStore {
    favorites: Array<{
        pluginName: string;
        note?: string;
    }>;
    pinned: Array<{
        pluginName: string;
        order: number;
    }>;
}
/**
 * Filter preferences within a profile
 */
export interface ProfileFilterPreferences {
    defaultFilters?: string[];
    savedFilterSets?: Array<{
        name: string;
        filters: string[];
    }>;
}
/**
 * A complete plugin profile
 */
export interface PluginProfile {
    /** Unique profile ID */
    id: string;
    /** Display name */
    name: string;
    /** Description */
    description?: string;
    /** Icon (emoji) */
    icon?: string;
    /** Color for display */
    color?: ProfileColor;
    /** When the profile was created */
    createdAt: string;
    /** When the profile was last updated */
    updatedAt: string;
    /** Whether this is the default profile */
    isDefault?: boolean;
    /** Whether the profile is locked from modification */
    locked?: boolean;
    /** Plugins in this profile */
    plugins: ProfilePlugin[];
    /** Tags configuration */
    tags?: ProfileTagStore;
    /** Groups configuration */
    groups?: ProfileGroupStore;
    /** Favorites configuration */
    favorites?: ProfileFavoritesStore;
    /** Filter preferences */
    filterPreferences?: ProfileFilterPreferences;
}
/**
 * Profile store (persisted data)
 */
export interface ProfileStore {
    /** Store version */
    version: string;
    /** Currently active profile ID */
    activeProfileId: string | null;
    /** All profiles */
    profiles: PluginProfile[];
}
/**
 * Options for creating a profile
 */
export interface CreateProfileOptions {
    /** Profile name */
    name: string;
    /** Description */
    description?: string;
    /** Icon */
    icon?: string;
    /** Color */
    color?: ProfileColor;
    /** Create from current configuration */
    fromCurrent?: boolean;
    /** Clone from existing profile ID */
    fromProfile?: string;
}
/**
 * Mode for applying a profile
 */
export type ApplyMode = 'replace' | 'merge';
/**
 * Options for applying a profile
 */
export interface ApplyProfileOptions {
    /** How to apply the profile */
    mode: ApplyMode;
    /** Download plugins that aren't installed */
    downloadMissing?: boolean;
    /** Remove plugins not in the profile (only for replace mode) */
    removeExtra?: boolean;
    /** Preview only, don't apply changes */
    dryRun?: boolean;
}
/**
 * Result of applying a profile
 */
export interface ApplyProfileResult {
    /** Whether the operation succeeded */
    success: boolean;
    /** Plugins that were added */
    added: string[];
    /** Plugins that were removed/disabled */
    removed: string[];
    /** Plugins that were modified */
    modified: Array<{
        name: string;
        changes: string[];
    }>;
    /** Plugins that were downloaded */
    downloaded: string[];
    /** Errors encountered */
    errors: Array<{
        plugin: string;
        error: string;
    }>;
}
/**
 * Difference between plugin configurations
 */
export interface ProfilePluginDiff {
    /** Version change */
    version?: {
        from: string;
        to: string;
    };
    /** Enabled state change */
    enabled?: {
        from: boolean;
        to: boolean;
    };
    /** Auto-update change */
    autoUpdate?: {
        from: boolean;
        to: boolean;
    };
    /** Source change */
    source?: {
        from: PluginSourceType;
        to: PluginSourceType;
    };
}
/**
 * Difference between two profiles
 */
export interface ProfileDiff {
    /** Plugins only in the first profile */
    onlyInA: ProfilePlugin[];
    /** Plugins only in the second profile */
    onlyInB: ProfilePlugin[];
    /** Plugins that differ between profiles */
    modified: Array<{
        plugin: string;
        changes: ProfilePluginDiff;
        pluginA: ProfilePlugin;
        pluginB: ProfilePlugin;
    }>;
    /** Plugins that are the same in both */
    unchanged: ProfilePlugin[];
}
/**
 * Default apply options
 */
export declare const DEFAULT_APPLY_OPTIONS: ApplyProfileOptions;
/**
 * Create empty profile store
 */
export declare function createEmptyProfileStore(): ProfileStore;
/**
 * Create empty apply result
 */
export declare function createEmptyApplyResult(): ApplyProfileResult;
/**
 * Generate a unique profile ID
 */
export declare function generateProfileId(): string;
//# sourceMappingURL=profile-types.d.ts.map