import { OnInit, OnDestroy, AfterViewInit, ChangeDetectorRef } from '@angular/core';
import { BaseResourceComponent } from '@memberjunction/ng-shared';
import * as i0 from "@angular/core";
/** Local mirror of MJGlobal's ClassRegistration shape (avoids importing the type). */
interface ClassRegistration {
    BaseClass: {
        name?: string;
    };
    SubClass: {
        name?: string;
    };
    Key: string | null;
    Priority: number;
}
interface RegistrationGroup {
    baseClassName: string;
    count: number;
    registrations: ClassRegistration[];
    expanded: boolean;
    /** Number of distinct keys (some keys can have multiple registrations at different priorities). */
    uniqueKeys: number;
    /** True when at least one key in this group has multiple registrations (priority resolution applies). */
    hasOverrides: boolean;
}
/**
 * Class Registry Browser — read-only inspector of every `@RegisterClass`
 * registration tracked by `MJGlobal.Instance.ClassFactory`. Groups by base
 * class, surfaces priority/override conflicts, supports search + copy.
 */
export declare class ClassRegistryInspectorComponent extends BaseResourceComponent implements OnInit, OnDestroy, AfterViewInit {
    private cdr;
    Groups: RegistrationGroup[];
    Stats: {
        total: number;
        baseClasses: number;
        withOverrides: number;
    };
    SearchQuery: string;
    CopyConfirmed: boolean;
    LastRefreshed: Date;
    constructor(cdr: ChangeDetectorRef);
    ngOnInit(): void;
    ngAfterViewInit(): void;
    ngOnDestroy(): void;
    PersistPrefs(): void;
    private savePrefs;
    GetResourceDisplayName(): Promise<string>;
    GetResourceIconClass(): Promise<string>;
    refresh(): void;
    OnGroupExpandedChange(group: RegistrationGroup, expanded: boolean): void;
    ExpandAll(): void;
    CollapseAll(): void;
    OnSearchChange(value: string): void;
    get FilteredGroups(): RegistrationGroup[];
    IsConflictRow(group: RegistrationGroup, reg: ClassRegistration): boolean;
    IsWinningRow(group: RegistrationGroup, reg: ClassRegistration): boolean;
    OnCopy(): Promise<void>;
    get LastRefreshedLabel(): string;
    TrackByBase: (_i: number, g: RegistrationGroup) => string;
    TrackByReg: (_i: number, r: ClassRegistration) => string;
    /**
     * The current base-class filter — non-empty only when the active search term
     * exactly matches a known base class name (the registry's only filter is the
     * search box). Lets the agent know the user has narrowed to one base class.
     */
    private get activeBaseClassFilter();
    /** Publish the current Class Registry browse state to the AI agent. */
    private publishAgentContext;
    /**
     * Register the read-only client tools the AI agent can invoke against the
     * Class Registry: SearchClassRegistry, FilterByBaseClass, ClearClassRegistryFilters.
     */
    private registerAgentClientTools;
    /** Apply (or clear, on empty string) the registry search query. */
    private toolSearch;
    /** Narrow to a single base class by exact name (case-insensitive). */
    private toolFilterByBaseClass;
    static ɵfac: i0.ɵɵFactoryDeclaration<ClassRegistryInspectorComponent, never>;
    static ɵcmp: i0.ɵɵComponentDeclaration<ClassRegistryInspectorComponent, "mj-class-registry-inspector", never, {}, {}, never, never, false, never>;
}
export {};
//# sourceMappingURL=class-registry.component.d.ts.map