import { Provider } from '@angular/core';
import { HttpClient } from '@angular/common/http';
import { Observable } from 'rxjs';
import { EasyI18nMessages } from 'easy-i18n-js';
import { EasyI18nLoader } from '@ngx-easy-i18n-js/core';
import { CanActivateFn } from '@angular/router';

interface IHttpEasyI18nLoaderOptions {
    /**
     * Url prefix, default '/assets/i18n/' or Array of prefix
     */
    prefix?: string | string[];
    /**
     * Url suffix, default '.json'
     */
    suffix?: string;
}
declare class HttpEasyI18nLoader extends EasyI18nLoader {
    private httpClient;
    private options;
    constructor(httpClient: HttpClient, options?: IHttpEasyI18nLoaderOptions);
    /**
     * Return messages with locale with HttpClient `${this.options.prefix ?? ''}${locale}${this.options.suffix ?? ''}`
     * @param locale
     */
    getMessages(locale: string): Observable<EasyI18nMessages>;
}

interface IScopedHttpEasyI18nLoaderScope {
    /**
     * Url prefix, Array of prefix
     */
    prefix: string | string[];
    /**
     * Alias
     */
    scope?: string;
}
interface IScopedHttpEasyI18nLoaderOptions {
    /**
     * Url suffix, default '.json'
     */
    suffix?: string;
}
declare class ScopedHttpEasyI18nLoader extends EasyI18nLoader {
    readonly httpClient: HttpClient;
    readonly scopes: IScopedHttpEasyI18nLoaderScope[];
    readonly options?: IScopedHttpEasyI18nLoaderOptions | undefined;
    private readonly list;
    constructor(httpClient: HttpClient, scopes: IScopedHttpEasyI18nLoaderScope[], options?: IScopedHttpEasyI18nLoaderOptions | undefined);
    getMessages(locale: string): Observable<EasyI18nMessages>;
}
declare function appendScopedHttpEasyI18nLoader(scopes: IScopedHttpEasyI18nLoaderScope[], options?: IScopedHttpEasyI18nLoaderOptions): CanActivateFn;

declare function provideEasyI18nLoader(options?: IHttpEasyI18nLoaderOptions): Provider[];
declare function provideEasyI18nScopedLoader(scopes: IScopedHttpEasyI18nLoaderScope[], options?: IHttpEasyI18nLoaderOptions): Provider[];

export { HttpEasyI18nLoader, ScopedHttpEasyI18nLoader, appendScopedHttpEasyI18nLoader, provideEasyI18nLoader, provideEasyI18nScopedLoader };
export type { IHttpEasyI18nLoaderOptions, IScopedHttpEasyI18nLoaderOptions, IScopedHttpEasyI18nLoaderScope };
