/// <reference types="promise.prototype.finally" />
import { Facebook } from '@ionic-native/facebook';
import { GooglePlus } from '@ionic-native/google-plus';
import { Storage } from '@ionic/storage';
import { Platform } from 'ionic-angular';
import { CoreoClient } from './client';
import { CoreoUser } from './user';
import { CoreoConfig } from './config';
import { CoreoTokenContext, CoreoAuthToken } from './token-context';
/**
 * Container for the result of authentication
 */
export interface CoreoAuthError {
    status: number;
    msg: string;
}
export declare type CoreoAuthResult = CoreoAuthToken | CoreoAuthError;
export declare type CoreoAuthMethod = 'basic' | 'google' | 'facebook' | 'twitter';
export interface CoreoAuthModules {
    basic: CoreoAuthType;
    google: CoreoAuthType;
    [key: string]: CoreoAuthType;
}
export interface CoreoAuthCredentials {
    email: string;
    password: string;
}
export interface CoreoOAuthConfig {
    surveyId: number;
    webClientId?: string;
}
export declare type CoreoAuthLoginOptions = CoreoAuthCredentials | CoreoOAuthConfig;
export interface CoreoAuthType {
    login(params: CoreoAuthLoginOptions): Promise<CoreoAuthResult>;
    logout(): Promise<void>;
    signup?(email: string, password: string, displayName: string, username: string): Promise<CoreoAuthResult>;
}
export declare class BasicAuth implements CoreoAuthType {
    private client;
    private platform;
    private config;
    constructor(client: CoreoClient, platform: Platform, config: CoreoConfig);
    login(credentials: CoreoAuthCredentials): Promise<CoreoAuthResult>;
    logout(): Promise<void>;
    signup(email: string, password: string, displayName: string, username: string): Promise<CoreoAuthResult>;
}
/**
 * Google OAuth
 */
export declare class GoogleAuth implements CoreoAuthType {
    private client;
    private platform;
    private google;
    constructor(client: CoreoClient, platform: Platform, google: GooglePlus);
    login(config: CoreoOAuthConfig): Promise<CoreoAuthResult>;
    logout(): Promise<void>;
}
/**
 * Facebook OAuth
 */
export declare class FacebookAuth implements CoreoAuthType {
    private client;
    private platform;
    private facebook;
    constructor(client: CoreoClient, platform: Platform, facebook: Facebook);
    login(config: CoreoOAuthConfig): Promise<CoreoAuthResult>;
    logout(): Promise<any>;
}
/**
 * Coreo Auth Service
 */
export declare class CoreoAuth {
    private tokenContext;
    private client;
    private platform;
    private user;
    private config;
    private storage;
    private google;
    private facebook;
    modules: CoreoAuthModules;
    context: CoreoAuthType;
    constructor(tokenContext: CoreoTokenContext, client: CoreoClient, platform: Platform, user: CoreoUser, config: CoreoConfig, storage: Storage, google: GooglePlus, facebook: Facebook);
    /**
     * Login method
     */
    login(method: CoreoAuthMethod, params?: CoreoAuthLoginOptions): Promise<CoreoAuthResult>;
    /**
     * Signup Method
     */
    signup(email: string, password: string, displayName: string, username: string): Promise<CoreoAuthResult>;
    /**
     * Logout Method
     */
    logout(): Promise<void>;
    reset(): void;
    /**
     * Get Profile
     */
    profile(): Promise<any>;
    /**
     * Update username
     */
    updateUsername(username: string): Promise<void>;
}
export default CoreoAuth;
