import * as i0 from '@angular/core';
import { Provider, EnvironmentProviders } from '@angular/core';
import * as i1 from '@ngx-translate/core';
import { TranslateLoader, TranslateModuleConfig, Language, TranslateService, MissingTranslationHandler, MissingTranslationHandlerParams } from '@ngx-translate/core';
import { Observable, BehaviorSubject } from 'rxjs';
import { HttpBackend } from '@angular/common/http';
import { ConfigService } from '@igo2/core/config';

declare class IgoLanguageModule {
    static ɵfac: i0.ɵɵFactoryDeclaration<IgoLanguageModule, never>;
    static ɵmod: i0.ɵɵNgModuleDeclaration<IgoLanguageModule, never, never, [typeof i1.TranslateModule]>;
    static ɵinj: i0.ɵɵInjectorDeclaration<IgoLanguageModule>;
}

interface LanguageOptions {
    prefix?: string | string[];
    ignoreLibsLocale?: boolean;
}
declare abstract class LanguageLoaderBase implements TranslateLoader {
    abstract isLoaded$: Observable<boolean>;
    abstract getTranslation(lang: string): Observable<any>;
}
type Translation = string | Translation[] | TranslationObject | any;
interface TranslationObject {
    [key: string]: Translation;
}

declare class LanguageLoader implements LanguageLoaderBase {
    private httpClient;
    private _isLoaded$;
    isLoaded$: Observable<boolean>;
    suffix: string;
    prefix?: string | string[];
    options: LanguageOptions;
    baseUrl: string;
    constructor(handler: HttpBackend, options: LanguageOptions);
    private getServerUrl;
    getTranslation(lang: string): Observable<any>;
}
declare class LanguageLoaderWithAsyncConfig extends LanguageLoader {
    private configService;
    constructor(handler: HttpBackend, configService: ConfigService, prefix?: string | string[], suffix?: string);
    getTranslation(lang: string): Observable<any>;
}

interface TranslationFeature<KindT extends TranslationFeatureKind> {
    kind: KindT;
    providers: (Provider | EnvironmentProviders)[];
}
declare enum TranslationFeatureKind {
    Translation = 0,
    DefaultLanguage = 1
}
/**
 * Make sure you only call this method in the root module of your application, most of the time called AppModule.
 */
declare function provideTranslation(featureConfig: TranslationFeature<TranslationFeatureKind.Translation>): EnvironmentProviders;
declare function withStaticConfig(options: LanguageOptions, defaultLanguage?: string | undefined): TranslationFeature<TranslationFeatureKind.Translation>;
declare function withAsyncConfig(defaultLanguage?: string | undefined): TranslationFeature<TranslationFeatureKind.Translation>;
/**
 * Get the first segment of the path (e.g., '/en/alerts' => 'en')
 * @param allowedLanguages default to ['fr', 'en']
 */
declare function withUrlDefaultLanguage(fallbackLang?: Language, allowedLanguages?: Language[]): TranslationFeature<TranslationFeatureKind.DefaultLanguage>;
declare const setTranslationConfig: (loader?: Provider, defaultLanguage?: string) => TranslateModuleConfig;
declare const LANGUAGE_LOADER: Provider;
declare const DEFAULT_LANGUAGE_LOADER: Provider;

declare function provideMockTranslation(): EnvironmentProviders;

declare class LanguageService {
    translate: TranslateService;
    private language;
    readonly language$: BehaviorSubject<string>;
    constructor();
    private setBrowserLanguage;
    getLanguage(): string;
    private matchLanguage;
    setLanguage(language: string): void;
    static ɵfac: i0.ɵɵFactoryDeclaration<LanguageService, never>;
    static ɵprov: i0.ɵɵInjectableDeclaration<LanguageService>;
}

declare class IgoMissingTranslationHandler implements MissingTranslationHandler {
    handle(params: MissingTranslationHandlerParams): string;
}

declare function labelAttribute(value: Translation | TranslationObject | undefined, defaultValue?: Translation | TranslationObject): Translation | TranslationObject;

export { DEFAULT_LANGUAGE_LOADER, IgoLanguageModule, IgoMissingTranslationHandler, LANGUAGE_LOADER, LanguageLoader, LanguageLoaderBase, LanguageLoaderWithAsyncConfig, LanguageService, TranslationFeatureKind, labelAttribute, provideMockTranslation, provideTranslation, setTranslationConfig, withAsyncConfig, withStaticConfig, withUrlDefaultLanguage };
export type { LanguageOptions, Translation, TranslationFeature, TranslationObject };
