/**
 * Development-only service for testing DOM mismatch detection and recovery.
 * This service provides methods to simulate DOM changes and agent commands.
 */
import { type ElementFingerprint, type ValidationResult } from './DomService';
export interface TestResult {
    command: string;
    index: number;
    validation: ValidationResult;
    outcome: 'executed' | 'recovered' | 'failed';
    details: string;
    timestamp: Date;
}
export interface ValidationLogEntry {
    timestamp: Date;
    action: string;
    originalIndex: number;
    validation: ValidationResult;
    recoveryAction?: string;
}
export interface ScenarioResult {
    scenarioId: string;
    scenarioName: string;
    steps: TestResult[];
    passed: boolean;
    summary: string;
}
declare class DevTestService {
    private static instance;
    private validationLog;
    private lastTestResult;
    private constructor();
    static getInstance(): DevTestService;
    /**
     * Insert a new interactable element before the element at the given index
     * This will shift all subsequent indices
     */
    insertElementBefore(index: number, count?: number): HTMLElement[];
    /**
     * Insert a new interactable element after the element at the given index
     */
    insertElementAfter(index: number): HTMLElement | null;
    /**
     * Remove the element at the given index
     */
    removeElement(index: number): boolean;
    /**
     * Remove multiple elements by their indices
     */
    removeMultipleElements(indices: number[]): number;
    /**
     * Simulate a component re-render by replacing the element with a new one
     * This creates a new DOM node with the same attributes
     */
    simulateRerender(index: number): HTMLElement | null;
    /**
     * Simulate a state change that re-renders a container
     */
    simulateStateChange(containerSelector?: string): number;
    /**
     * Simulate navigation by replacing page content
     */
    simulateNavigation(): void;
    /**
     * Reorder elements in a list container
     */
    reorderList(containerSelector: string): number;
    /**
     * Inject content after a delay
     */
    injectDelayedContent(delayMs?: number): Promise<HTMLElement[]>;
    /**
     * Simulate infinite scroll by adding elements at the end
     */
    simulateInfiniteScroll(count?: number): HTMLElement[];
    /**
     * Replace a skeleton loader with real content
     */
    replaceSkeleton(skeletonIndex: number): HTMLElement | null;
    /**
     * Insert a sibling of the same type to break nth-of-type selectors
     */
    insertSameSibling(index: number): HTMLElement | null;
    /**
     * Change the class name of an element
     */
    changeClassName(index: number, newClass: string): boolean;
    /**
     * Wrap an element in a new parent div, changing its DOM path
     */
    wrapInParent(index: number): HTMLElement | null;
    /**
     * Add a duplicate ID to cause selector ambiguity
     */
    addDuplicateId(index: number): HTMLElement | null;
    /**
     * Create and show a modal with buttons
     */
    showModal(): HTMLElement;
    /**
     * Expand a dropdown to show options
     */
    expandDropdown(index: number): HTMLElement | null;
    /**
     * Perform rapid DOM changes
     */
    rapidFireChanges(count?: number): void;
    /**
     * Create an iframe with a button inside
     */
    createIframeWithButton(): HTMLIFrameElement;
    /**
     * Create a custom element with Shadow DOM
     */
    createShadowDomElement(): HTMLElement;
    /**
     * Change the text content of an element
     */
    changeElementContent(index: number, newText: string): boolean;
    /**
     * Hide an element (make it non-interactable)
     */
    hideElement(index: number): boolean;
    /**
     * Simulate an agent command and track the result
     */
    simulateAgentCommand(tool: string, args: Record<string, unknown>): Promise<TestResult>;
    /**
     * Run a predefined test scenario
     */
    runScenario(scenarioId: string): Promise<ScenarioResult>;
    private runIndexShiftInsertScenario;
    private runIndexShiftRemoveScenario;
    private runContentChangeScenario;
    private runSpaRerenderScenario;
    /**
     * Run all test scenarios
     */
    runAllScenarios(): Promise<ScenarioResult[]>;
    /**
     * Get the last test result
     */
    getLastTestResult(): TestResult | null;
    /**
     * Get the validation log
     */
    getValidationLog(): ValidationLogEntry[];
    /**
     * Clear the validation log
     */
    clearLog(): void;
    private addToLog;
    /**
     * Clean up test elements from the DOM
     */
    cleanupTestElements(): void;
    /**
     * Get all indexed elements with their fingerprints
     */
    getIndexedElements(): Array<{
        index: number;
        fingerprint: ElementFingerprint;
        element: HTMLElement | null;
    }>;
    /**
     * Force a validation check on a specific index
     */
    forceValidation(index: number): ValidationResult;
}
export declare const devTestService: DevTestService;
export {};
//# sourceMappingURL=DevTestService.d.ts.map