/**
 * PortfolioSyncComparer - Compares local and GitHub portfolio elements
 *
 * Determines what actions need to be taken based on the sync mode:
 * - additive: Only add missing elements
 * - mirror: Make local exactly match GitHub
 * - backup: Treat GitHub as authoritative source
 */
import { ElementType } from '../portfolio/types.js';
import { GitHubIndexEntry } from '../portfolio/GitHubPortfolioIndexer.js';
export type SyncMode = 'additive' | 'mirror' | 'backup';
export interface SyncAction {
    type: ElementType;
    name: string;
    path: string;
    action: 'add' | 'update' | 'delete' | 'skip';
    reason?: string;
    localSha?: string;
    remoteSha?: string;
}
export interface SyncActions {
    toAdd: SyncAction[];
    toUpdate: SyncAction[];
    toDelete: SyncAction[];
    toSkip: SyncAction[];
}
export declare class PortfolioSyncComparer {
    /**
     * Compare GitHub and local elements to determine sync actions
     */
    compareElements(githubElements: Map<ElementType, GitHubIndexEntry[]>, localElements: Map<ElementType, any[]>, mode: SyncMode): SyncActions;
    /**
     * Compare elements of a specific type
     */
    private compareTypeElements;
    /**
     * Determine if an element should be updated
     */
    private shouldUpdate;
    /**
     * Normalize element name for comparison
     * Handles different naming formats and extensions
     */
    private normalizeElementName;
    /**
     * Count total elements in a map
     */
    private countElements;
}
//# sourceMappingURL=PortfolioSyncComparer.d.ts.map