/**
 * Export/Import Types
 *
 * Type definitions for configuration export and import functionality.
 *
 * @since v1.31.0
 */
import type { PluginSourceType } from '../types/plugin.js';
/**
 * Export format version
 */
export declare const EXPORT_FORMAT_VERSION = "1.0";
/**
 * Supported export formats
 */
export type ExportFormat = 'json' | 'yaml';
/**
 * What's included in an export
 */
export interface ExportIncludes {
    plugins: boolean;
    servers: boolean;
    favorites: boolean;
    tags: boolean;
    groups: boolean;
    settings: boolean;
    filterPreferences: boolean;
}
/**
 * Export manifest with metadata
 */
export interface ExportManifest {
    /** Export format version */
    version: string;
    /** Pluginator version that created export */
    pluginatorVersion: string;
    /** When the export was created */
    exportedAt: string;
    /** What's included in the export */
    includes: ExportIncludes;
    /** SHA-256 checksum for integrity verification */
    checksum: string;
}
/**
 * Plugin configuration for export
 */
export interface PluginExportConfig {
    /** Plugin name */
    name: string;
    /** Source type */
    source: PluginSourceType;
    /** Source-specific identifier (Modrinth slug, Spigot ID, etc.) */
    sourceId?: string;
    /** Currently installed version */
    version?: string;
    /** Whether auto-update is enabled */
    autoUpdate?: boolean;
}
/**
 * Server configuration for export
 */
export interface ServerExportConfig {
    /** Server display name */
    name: string;
    /** Server type */
    type: 'production' | 'test';
    /** Plugins directory path (sanitized with ${HOME}) */
    pluginsPath: string;
}
/**
 * Favorite entry for export
 */
export interface FavoriteExportEntry {
    pluginName: string;
    addedAt: string;
    note?: string;
}
/**
 * Pinned entry for export
 */
export interface PinnedExportEntry {
    pluginName: string;
    order: number;
}
/**
 * Favorites store for export
 */
export interface FavoritesExportStore {
    favorites: FavoriteExportEntry[];
    pinned: PinnedExportEntry[];
}
/**
 * Tag for export
 */
export interface TagExportEntry {
    id: string;
    name: string;
    color: string;
    isSystem?: boolean;
}
/**
 * Tag assignment for export
 */
export interface TagAssignmentExport {
    pluginName: string;
    tagIds: string[];
}
/**
 * Tags store for export
 */
export interface TagsExportStore {
    tags: TagExportEntry[];
    assignments: TagAssignmentExport[];
}
/**
 * Group for export
 */
export interface GroupExportEntry {
    id: string;
    name: string;
    color?: string;
    icon?: string;
    plugins: string[];
    order: number;
}
/**
 * Groups store for export
 */
export interface GroupsExportStore {
    groups: GroupExportEntry[];
}
/**
 * App settings for export
 */
export interface SettingsExport {
    checkUpdatesOnStartup?: boolean;
    defaultSource?: PluginSourceType;
    backupBeforeUpdate?: boolean;
    maxBackups?: number;
    retentionDays?: number;
}
/**
 * Filter preferences for export
 */
export interface FilterPreferencesExport {
    defaultFilters?: string[];
    savedFilterSets?: Array<{
        name: string;
        filters: string[];
    }>;
}
/**
 * Complete export data structure
 */
export interface ExportData {
    manifest: ExportManifest;
    plugins?: PluginExportConfig[];
    servers?: ServerExportConfig[];
    favorites?: FavoritesExportStore;
    tags?: TagsExportStore;
    groups?: GroupsExportStore;
    settings?: SettingsExport;
    filterPreferences?: FilterPreferencesExport;
}
/**
 * Export options
 */
export interface ExportOptions {
    /** What to include in export */
    includes?: Partial<ExportIncludes>;
    /** Output format */
    format?: ExportFormat;
    /** Pretty print output */
    pretty?: boolean;
    /** Sanitize sensitive data (paths, etc.) */
    sanitize?: boolean;
    /** Compress output with gzip */
    compress?: boolean;
}
/**
 * Import mode
 */
export type ImportMode = 'merge' | 'replace';
/**
 * Conflict resolution strategy
 */
export type ConflictResolution = 'keep' | 'overwrite' | 'ask';
/**
 * Import options
 */
export interface ImportOptions {
    /** How to handle existing data (defaults to 'merge') */
    mode?: ImportMode;
    /** Validate before import */
    validate?: boolean;
    /** Preview without applying */
    dryRun?: boolean;
    /** How to resolve conflicts */
    conflictResolution?: ConflictResolution;
}
/**
 * Import summary counts
 */
export interface ImportSummary {
    plugins: number;
    servers: number;
    tags: number;
    groups: number;
    favorites: number;
}
/**
 * Import error
 */
export interface ImportError {
    /** Error category */
    type: 'plugin' | 'server' | 'tag' | 'group' | 'favorite' | 'settings' | 'validation';
    /** Item that caused the error */
    item: string;
    /** Error message */
    error: string;
}
/**
 * Import result
 */
export interface ImportResult {
    success: boolean;
    added: ImportSummary;
    updated: ImportSummary;
    skipped: ImportSummary;
    errors: ImportError[];
    warnings: string[];
}
/**
 * Change type for preview
 */
export type ChangeType = 'add' | 'update' | 'unchanged' | 'conflict';
/**
 * Preview change item
 */
export interface PreviewChange {
    type: ChangeType;
    name: string;
    category: 'plugin' | 'server' | 'tag' | 'group' | 'favorite';
    details?: string;
}
/**
 * Import preview
 */
export interface ImportPreview {
    source: string;
    version: string;
    compatible: boolean;
    warnings: string[];
    changes: PreviewChange[];
    summary: {
        add: number;
        update: number;
        unchanged: number;
        conflict: number;
    };
}
/**
 * Validation result
 */
export interface ValidationResult {
    valid: boolean;
    errors: string[];
    warnings: string[];
}
/**
 * Compatibility result
 */
export interface CompatibilityResult {
    compatible: boolean;
    warnings: string[];
    errors: string[];
    migrationRequired: boolean;
}
/**
 * Default export includes
 */
export declare const DEFAULT_EXPORT_INCLUDES: ExportIncludes;
/**
 * Default export options
 */
export declare const DEFAULT_EXPORT_OPTIONS: ExportOptions;
/**
 * Default import options
 */
export declare const DEFAULT_IMPORT_OPTIONS: ImportOptions;
/**
 * Create empty import summary
 */
export declare function createEmptyImportSummary(): ImportSummary;
/**
 * Create empty import result
 */
export declare function createEmptyImportResult(): ImportResult;
//# sourceMappingURL=export-types.d.ts.map