/**
 * Base Reconciler - Abstract base class for external tool reconciliation
 *
 * Provides common logic for reconciling external tool states (GitHub, JIRA, ADO)
 * with increment metadata.json statuses.
 *
 * Part of increment 0168: Code Review Fixes
 *
 * @module sync/base-reconciler
 * @since v0.34.0
 */
import { Logger } from '../utils/logger.js';
/**
 * Common options for all reconcilers
 */
export interface BaseReconcileOptions {
    projectRoot: string;
    dryRun?: boolean;
    logger?: Logger;
}
/**
 * Base increment state interface - extended by each reconciler
 */
export interface BaseIncrementState {
    incrementId: string;
    incrementPath: string;
    metadataStatus: string;
    featureId?: string;
}
/**
 * Base reconcile result interface - extended by each reconciler
 */
export interface BaseReconcileResult {
    scanned: number;
    mismatches: number;
    closed: number;
    reopened: number;
    errors: string[];
}
/**
 * Abstract base class for reconcilers
 *
 * Implements the template method pattern for reconciliation:
 * 1. Check if sync is enabled
 * 2. Initialize client/credentials
 * 3. Scan increments
 * 4. Reconcile each increment
 * 5. Print summary
 */
export declare abstract class BaseReconciler<TState extends BaseIncrementState, TResult extends BaseReconcileResult> {
    protected projectRoot: string;
    protected dryRun: boolean;
    protected logger: Logger;
    constructor(options: BaseReconcileOptions);
    /**
     * Main reconciliation entry point (template method)
     */
    reconcile(): Promise<TResult>;
    /**
     * Reconcile a single increment
     */
    protected reconcileIncrement(inc: TState, result: TResult): Promise<void>;
    /**
     * Scan increments directory including archived/abandoned increments.
     * All increments with external links are included so the reconciler can
     * close issues for completed/abandoned increments that were moved to _archive.
     */
    protected scanIncrements(): Promise<TState[]>;
    /**
     * Load config.json
     */
    protected loadConfig(): Promise<Record<string, unknown>>;
    /**
     * Print reconciliation summary
     */
    protected printSummary(result: TResult): void;
    /**
     * Get the external tool name (e.g., "GitHub", "JIRA", "ADO")
     */
    protected abstract getToolName(): string;
    /**
     * Get the label for closed items (e.g., "Issues closed", "Work items closed")
     */
    protected abstract getClosedLabel(): string;
    /**
     * Get the label for reopened items
     */
    protected abstract getReopenedLabel(): string;
    /**
     * Create an empty result object
     */
    protected abstract createEmptyResult(): TResult;
    /**
     * Check if sync is enabled in config
     */
    protected abstract isSyncEnabled(config: Record<string, unknown>): boolean;
    /**
     * Log that sync is disabled
     */
    protected abstract logSyncDisabled(): void;
    /**
     * Initialize client/credentials
     * @returns true if successful, false otherwise
     */
    protected abstract initializeClient(): Promise<boolean>;
    /**
     * Get the error message for initialization failure
     */
    protected abstract getInitializationErrorMessage(): string;
    /**
     * Extract platform-specific increment state from metadata
     * @returns null if increment has no external links
     */
    protected abstract extractIncrementState(incrementId: string, incrementPath: string, metadata: Record<string, unknown>): Promise<TState | null>;
    /**
     * Reconcile platform-specific items for an increment
     */
    protected abstract reconcileIncrementItems(inc: TState, shouldBeClosed: boolean, shouldBeOpen: boolean, metadataStatus: string, result: TResult): Promise<void>;
}
//# sourceMappingURL=base-reconciler.d.ts.map