/**
 * Profile Service
 *
 * Manages plugin profiles (server configurations).
 *
 * @since v1.33.0
 */
import { type ApplyProfileOptions, type ApplyProfileResult, type CreateProfileOptions, type PluginProfile, type ProfileColor, type ProfileDiff, type ProfilePlugin, type ProfileStore } from './profile-types.js';
/**
 * Data provider for getting current configuration
 */
export interface ProfileDataProvider {
    /** Get current plugins configuration */
    getCurrentPlugins?: () => ProfilePlugin[];
    /** Get current tags configuration */
    getCurrentTags?: () => {
        tags: Array<{
            id: string;
            name: string;
            color: string;
        }>;
        assignments: Array<{
            pluginName: string;
            tagIds: string[];
        }>;
    } | null;
    /** Get current groups configuration */
    getCurrentGroups?: () => {
        groups: Array<{
            id: string;
            name: string;
            color?: string;
            icon?: string;
            plugins: string[];
            order: number;
        }>;
    } | null;
    /** Get current favorites configuration */
    getCurrentFavorites?: () => {
        favorites: Array<{
            pluginName: string;
            note?: string;
        }>;
        pinned: Array<{
            pluginName: string;
            order: number;
        }>;
    } | null;
}
/**
 * Profile service for managing plugin profiles
 */
export declare class ProfileService {
    private store;
    private provider;
    private filePath;
    constructor(initialStore?: ProfileStore, provider?: ProfileDataProvider);
    /**
     * Set the data provider
     */
    setProvider(provider: ProfileDataProvider): void;
    /**
     * Set the file path for persistence
     */
    setFilePath(path: string): void;
    /**
     * Get the file path
     */
    getFilePath(): string | null;
    /**
     * Create a new profile
     */
    createProfile(options: CreateProfileOptions): PluginProfile;
    /**
     * Update an existing profile
     */
    updateProfile(id: string, updates: Partial<Omit<PluginProfile, 'id' | 'createdAt'>>): PluginProfile | null;
    /**
     * Delete a profile
     */
    deleteProfile(id: string): boolean;
    /**
     * Get a profile by ID
     */
    getProfile(id: string): PluginProfile | null;
    /**
     * Get a profile by name
     */
    getProfileByName(name: string): PluginProfile | null;
    /**
     * Get all profiles
     */
    getProfiles(): PluginProfile[];
    /**
     * Get profile count
     */
    getProfileCount(): number;
    /**
     * Get the active profile
     */
    getActiveProfile(): PluginProfile | null;
    /**
     * Set the active profile
     */
    setActiveProfile(id: string | null): boolean;
    /**
     * Check if a profile is active
     */
    isActiveProfile(id: string): boolean;
    /**
     * Clone a profile
     */
    cloneProfile(id: string, newName: string): PluginProfile | null;
    /**
     * Save current configuration to a profile
     */
    snapshotToProfile(id: string): boolean;
    /**
     * Apply a profile (dry run only - returns what would change)
     */
    applyProfile(id: string, options?: ApplyProfileOptions): ApplyProfileResult;
    /**
     * Get changes between two plugin configurations
     */
    private getPluginChanges;
    /**
     * Compare two profiles
     */
    compareProfiles(profileAId: string, profileBId: string): ProfileDiff | null;
    /**
     * Compare a profile with current configuration
     */
    compareWithCurrent(profileId: string): ProfileDiff | null;
    /**
     * Diff two plugin lists
     */
    private diffPluginLists;
    /**
     * Get detailed diff between two plugin configs
     */
    private getPluginDiff;
    /**
     * Export a profile to JSON string
     */
    exportProfile(id: string): string | null;
    /**
     * Import a profile from JSON string
     */
    importProfile(data: string): PluginProfile | null;
    /**
     * Search profiles by name or description
     */
    searchProfiles(query: string): PluginProfile[];
    /**
     * Get profiles by color
     */
    getProfilesByColor(color: ProfileColor): PluginProfile[];
    /**
     * Serialize for persistence
     */
    serialize(): string;
    /**
     * Load from serialized data
     */
    static fromSerialized(data: string, provider?: ProfileDataProvider): ProfileService;
    /**
     * Get the raw store
     */
    getStore(): ProfileStore;
    /**
     * Reset the service
     */
    reset(): void;
}
/**
 * Get the singleton profile service
 */
export declare function getProfileService(): ProfileService;
/**
 * Reset the singleton
 */
export declare function resetProfileService(): void;
//# sourceMappingURL=profile-service.d.ts.map