import { ConfigService } from '@igo2/core/config';
import { BehaviorSubject } from 'rxjs';
import * as i0 from '@angular/core';

declare enum StorageScope {
    SESSION = "Session",
    LOCAL = "Local"
}
interface StorageOptions {
    key: string;
}
interface StorageServiceEvent {
    key?: string;
    scope: StorageScope;
    event: StorageServiceEventEnum;
    previousValue?: any;
    currentValue?: any;
}
declare enum StorageServiceEventEnum {
    ADDED = "Added",
    MODIFIED = "Modified",
    REMOVED = "Removed",
    CLEARED = "Cleared"
}

declare abstract class BaseStorage<T extends StorageOptions = StorageOptions> {
    protected options?: T;
    storageChange$: BehaviorSubject<StorageServiceEvent>;
    constructor(config: ConfigService);
    /**
     * Use to get the data found in storage file
     */
    get(key: string, scope?: StorageScope): string | object | boolean | number;
    set(key: string, value: unknown, scope?: StorageScope): void;
    remove(key: string, scope?: StorageScope): void;
    clear(scope?: StorageScope): void;
}

declare class StorageService extends BaseStorage<StorageOptions> {
    constructor();
    static ɵfac: i0.ɵɵFactoryDeclaration<StorageService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<StorageService>;
}

export { BaseStorage, StorageScope, StorageService, StorageServiceEventEnum };
export type { StorageOptions, StorageServiceEvent };
