import { Observable } from 'rxjs';
import { IMetadataProvider } from '@memberjunction/core';
import { MJUserEntity } from '@memberjunction/core-entities';
import * as i0 from "@angular/core";
/**
 * Service to manage Developer Mode functionality across Explorer apps.
 *
 * Developer Mode shows additional debugging tools and developer-focused
 * features in the UI. Only users with Developer, Admin, or System Administrator
 * roles can enable developer mode.
 *
 * Settings are persisted using the MJ: User Settings entity via UserInfoEngine.
 *
 * Usage:
 * ```typescript
 * constructor(private devMode: DeveloperModeService) {}
 *
 * async ngOnInit() {
 *     await this.devMode.Initialize(userEntity);
 *
 *     // Subscribe to changes
 *     this.devMode.IsEnabled$.subscribe(enabled => {
 *         this.showDevTools = enabled;
 *     });
 * }
 * ```
 */
export declare class DeveloperModeService {
    private _isEnabled$;
    private _isDeveloper$;
    private _initialized;
    private _currentUser;
    /**
     * Optional explicit metadata provider. Set via `setProvider()` from a
     * caller with provider context. Falls back to `Metadata.Provider` when
     * not set.
     */
    private _provider;
    set Provider(value: IMetadataProvider | null);
    get Provider(): IMetadataProvider;
    private static readonly DEVELOPER_ROLES;
    /**
     * Observable for developer mode enabled state.
     * Emits whenever developer mode is toggled.
     */
    get IsEnabled$(): Observable<boolean>;
    /**
     * Observable for whether user has developer role.
     * This determines if they CAN enable developer mode.
     */
    get IsDeveloper$(): Observable<boolean>;
    /**
     * Current enabled state (synchronous access)
     */
    get IsEnabled(): boolean;
    /**
     * Whether user has developer role (synchronous access)
     */
    get IsDeveloper(): boolean;
    /**
     * Whether the service has been initialized
     */
    get IsInitialized(): boolean;
    /**
     * Initialize service with current user.
     * Call this after login/authentication completes.
     */
    Initialize(user: MJUserEntity): Promise<void>;
    /**
     * Toggle developer mode on/off.
     * Only works if user has developer role.
     * @returns The new state, or false if user cannot enable dev mode
     */
    Toggle(): Promise<boolean>;
    /**
     * Enable developer mode (if user has developer role)
     */
    Enable(): Promise<void>;
    /**
     * Disable developer mode
     */
    Disable(): Promise<void>;
    /**
     * Reset the service (e.g., on logout)
     */
    Reset(): void;
    /**
     * Load the developer mode setting from User Settings entity
     */
    private loadSetting;
    /**
     * Save the developer mode setting to User Settings entity
     */
    private saveSetting;
    /**
     * Check if user has a developer role using the in-memory UserInfo.UserRoles
     * already loaded by the provider. No DB round-trip required — role names
     * are denormalized onto each UserRoleInfo as `Role`.
     */
    private checkDeveloperRole;
    static ɵfac: i0.ɵɵFactoryDeclaration<DeveloperModeService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<DeveloperModeService>;
}
//# sourceMappingURL=developer-mode.service.d.ts.map