import { ChangeDetectorRef } from '@angular/core';
import { ResourceData } from '@memberjunction/core-entities';
import { BaseResourceComponent } from '@memberjunction/ng-shared';
import { PredictiveStudioEngine } from '../engine/predictive-studio.engine';
import * as i0 from "@angular/core";
/**
 * Shared base for every Predictive Studio section resource.
 *
 * Predictive Studio was refactored from one monolithic left-nav dashboard into six top-nav Nav Items
 * (the canonical MJ app shape — mirrors AI Administration). Each section is its own
 * `BaseResourceComponent` registered under a distinct `DriverClass` and hosting the matching standalone
 * panel (`ps-home`, `ps-pipelines`, …). Because the panels all take `@Input() engine:
 * PredictiveStudioEngine`, every section resource has identical data-loading and lifecycle needs — this
 * base captures that once so the concrete wrappers stay thin (single panel binding, single
 * `DriverClass`, single icon/title).
 *
 * Responsibilities owned here:
 * - **Self-load the engine.** Each section resolves a provider-scoped {@link PredictiveStudioEngine} via
 *   `GetProviderInstance` (multi-provider correctness — never the process-global singleton) and runs
 *   `Config`. The monolith loaded the engine once for all six panels; standalone sections each load it,
 *   but `Config(false, …)` is a cached no-op after the first section warms it, so the cost is paid once.
 * - **Signal load completion.** Calls {@link NotifyLoadComplete} after the engine resolves (or fails),
 *   so direct-URL navigation to any section clears the shell loading screen. Failures still notify —
 *   the panel renders its representative sample data when the live arrays are empty.
 * - **Agent context.** Reports a small section snapshot to the AI agent (chat + realtime co-agent) via
 *   `SetAgentContext`. No mutating client tools are exposed — Predictive Studio's writes happen through
 *   its own dialogs/agent, not via surface tools.
 *
 * The docked per-section copilot from the monolith is intentionally gone: MJ's global chat now owns the
 * Model Development Agent conversation, so sections don't embed their own chat.
 *
 * @template TKey the agent-context `Section` discriminator string for this resource.
 */
export declare abstract class PSResourceBase extends BaseResourceComponent {
    protected readonly cdr: ChangeDetectorRef;
    /**
     * Provider-scoped Predictive Studio engine. Resolved in {@link loadSection} via
     * {@link PredictiveStudioEngine.GetProviderInstance} so a multi-provider client (or an embedded
     * non-default provider) reads the right server's PS reference data. Bound into the hosted panel's
     * `[engine]` input once loading completes.
     */
    engine: PredictiveStudioEngine;
    /** True until the engine resolves; gates the panel host so `[engine]` is never bound before it's ready. */
    isLoading: boolean;
    /** Stable section identifier for agent context + (subclass) titling. */
    protected abstract readonly SectionKey: string;
    /** Human-readable section label used in chrome + agent context. */
    protected abstract readonly SectionLabel: string;
    ngOnInit(): void;
    ngOnDestroy(): void;
    /**
     * Resolve the provider-scoped engine, then notify the shell. Always calls {@link NotifyLoadComplete}
     * — even on failure — so the loading screen can never hang on a direct-URL section load.
     */
    protected loadSection(): Promise<void>;
    /**
     * Report the section's state to the AI agent (async chat + realtime co-agent share this snapshot).
     * Subclasses may override {@link extraAgentContext} to add section-specific fields. No client tools
     * are registered — Predictive Studio surfaces are read/navigate-only to the agent; model creation,
     * training, and promotion run through PS's own dialogs and the Model Development Agent.
     */
    protected publishAgentContext(): void;
    /** Hook for subclasses to contribute section-specific agent-context fields. Default: none. */
    protected extraAgentContext(): Record<string, unknown>;
    GetResourceDisplayName(_data: ResourceData): Promise<string>;
    GetResourceIconClass(_data: ResourceData): Promise<string>;
    /** Font Awesome icon for the section (chrome + shell tab). */
    protected abstract readonly SectionIcon: string;
    static ɵfac: i0.ɵɵFactoryDeclaration<PSResourceBase, never>;
    static ɵdir: i0.ɵɵDirectiveDeclaration<PSResourceBase, never, never, {}, {}, never, never, true, never>;
}
//# sourceMappingURL=ps-resource-base.d.ts.map