import { InjectionToken } from '@angular/core';
import { BehaviorSubject, Observable } from 'rxjs';
export interface SdSettingOption<T = any> {
    type?: 'session';
    default?: T;
    args?: {
        [key: string]: any;
    };
}
export interface SdSettingOptionServer<T = any> {
    default?: T;
    args?: {
        [key: string]: any;
    };
}
export interface SdSetting<T = any> {
    get: () => T;
    set: (data: T) => void;
    has: () => boolean;
    remove: () => void;
    subject: BehaviorSubject<T>;
    observer: Observable<T>;
}
export interface SdSettingServer<T = any> {
    get: () => Promise<T>;
    set: (data: T) => Promise<void>;
    has: () => Promise<boolean>;
    remove: () => Promise<void>;
    subject: BehaviorSubject<T>;
    observer: Observable<T>;
}
export interface ISettingConfiguration {
    convertKey?: (key: string) => string;
    set?: (key: string, value: {
        data: any;
        createdOn: Date;
    }, args?: SdSettingOptionServer) => Promise<void>;
    get?: (key: string, args?: SdSettingOptionServer) => Promise<{
        data: any;
        createdOn: Date;
    }>;
    remove?: (key: string, args?: SdSettingOptionServer) => Promise<void>;
}
export declare const SETTING_CONFIG: InjectionToken<ISettingConfiguration>;
