import { Store } from '@ngrx/store';
import { Observable } from 'rxjs';
import { UserIdService } from '../../auth/user-auth/facade/user-id.service';
import { Title, User, UserSignUp } from '../../model/misc.model';
import { StateWithProcess } from '../../process/store/process-state';
import { StateWithUser } from '../store/user-state';
import { UserAccountFacadeTransitionalToken, UserProfileFacadeTransitionalToken, UserRegisterFacadeTransitionalToken } from '../user-transitional-tokens';
export declare class UserService {
    protected store: Store<StateWithUser | StateWithProcess<void>>;
    protected userIdService: UserIdService;
    protected userAccountFacade?: UserAccountFacadeTransitionalToken;
    protected userProfileFacade?: UserProfileFacadeTransitionalToken;
    protected userRegisterFacade?: UserRegisterFacadeTransitionalToken;
    constructor(store: Store<StateWithUser | StateWithProcess<void>>, userIdService: UserIdService, userAccountFacade?: UserAccountFacadeTransitionalToken, userProfileFacade?: UserProfileFacadeTransitionalToken, userRegisterFacade?: UserRegisterFacadeTransitionalToken);
    /**
     * Returns a user.
     *
     * @deprecated since 3.2, use `UserAccountFacade.get()` from `@spartacus/user` package.
     */
    get(): Observable<User>;
    /**
     * Loads the user's details.
     *
     * @deprecated since 3.2, use `UserAccountFacade.get()` from `@spartacus/user` package.
     */
    load(): void;
    /**
     * Register a new user.
     *
     * @param submitFormData as UserRegisterFormData
     *
     * @deprecated since 3.2, use `UserRegisterFacade.register()` from `@spartacus/user` package.
     */
    register(userRegisterFormData: UserSignUp): void;
    /**
     * Register a new user from guest.
     *
     * @param guid
     * @param password
     */
    registerGuest(guid: string, password: string): void;
    /**
     * Returns the register user process loading flag.
     *
     * @deprecated since 3.2, subscribe to `UserRegisterFacade.register()` from `@spartacus/user` package
     * to get the loading state.
     */
    getRegisterUserResultLoading(): Observable<boolean>;
    /**
     * Returns the register user process success flag.
     *
     * @deprecated since 3.2, subscribe to `UserRegisterFacade.register()` from `@spartacus/user` package
     * to get the success state.
     */
    getRegisterUserResultSuccess(): Observable<boolean>;
    /**
     * Returns the register user process error flag
     *
     * @deprecated since 3.2, subscribe to `UserRegisterFacade.register()` from `@spartacus/user` package
     * to get the error state.
     */
    getRegisterUserResultError(): Observable<boolean>;
    /**
     * Resets the register user process flags
     *
     * @deprecated since 3.2, no longer needed when you use `UserRegisterFacade.register()`
     * from `@spartacus/user` package.
     */
    resetRegisterUserProcessState(): void;
    /**
     * Remove user account, that's also called close user's account.
     *
     * @deprecated since 3.2, use `UserProfileFacade.close()` from `@spartacus/user` package.
     */
    remove(): void;
    /**
     * Returns the remove user loading flag.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.close()` from `@spartacus/user` package
     * to get the loading state.
     */
    getRemoveUserResultLoading(): Observable<boolean>;
    /**
     * Returns the remove user failure outcome.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.close()` from `@spartacus/user` package
     * to get the error state.
     */
    getRemoveUserResultError(): Observable<boolean>;
    /**
     * Returns the remove user process success outcome.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.close()` from `@spartacus/user` package
     * to get the success state.
     */
    getRemoveUserResultSuccess(): Observable<boolean>;
    /**
     * Resets the remove user process state. The state needs to be reset after the process
     * concludes, regardless if it's a success or an error
     *
     * @deprecated since 3.2, no longer needed when you use `UserProfileFacade.close()`
     * from `@spartacus/user` package.
     *
     */
    resetRemoveUserProcessState(): void;
    /**
     * Returns titles.
     *
     * @deprecated since 3.2, use `UserProfileFacade.getTitles()` from `@spartacus/user` package.
     */
    getTitles(): Observable<Title[]>;
    /**
     * Retrieves titles.
     *
     * @deprecated since 3.2, use `UserProfileFacade.getTitles()` from `@spartacus/user` package.
     */
    loadTitles(): void;
    /**
     * Return whether user's password is successfully reset.
     *
     * @deprecated since 3.2, subscribe to `UserPasswordFacade.reset()` from `@spartacus/user` package
     * to get the success state.
     *
     */
    isPasswordReset(): Observable<boolean>;
    /**
     * Updates the user's details.
     *
     * @param userDetails to be updated
     *
     * @deprecated since 3.2, use `UserProfileFacade.update()` from `@spartacus/user` package.
     */
    updatePersonalDetails(userDetails: User): void;
    /**
     * Returns the update user's personal details loading flag.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.update()` from `@spartacus/user` package
     * to get the loading state.
     */
    getUpdatePersonalDetailsResultLoading(): Observable<boolean>;
    /**
     * Returns the update user's personal details error flag.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.update()` from `@spartacus/user` package
     * to get the error state.
     */
    getUpdatePersonalDetailsResultError(): Observable<boolean>;
    /**
     * Returns the update user's personal details success flag.
     *
     * @deprecated since 3.2, subscribe to `UserProfileFacade.update()` from `@spartacus/user` package
     * to get the success state.
     */
    getUpdatePersonalDetailsResultSuccess(): Observable<boolean>;
    /**
     * Resets the update user details processing state.
     *
     * @deprecated since 3.2, no longer needed when you use `UserProfileFacade.update()`
     * from `@spartacus/user` package.
     */
    resetUpdatePersonalDetailsProcessingState(): void;
    /**
     * Reset new password.  Part of the forgot password flow.
     *
     * @param token
     * @param password
     *
     * @deprecated since 3.2, use `UserPasswordFacade.reset()` from `@spartacus/user` package.
     */
    resetPassword(token: string, password: string): void;
    /**
     * Request an email to reset a forgotten password.
     *
     * @deprecated since 3.2, use `UserPasswordFacade.requestForgotPasswordEmail()`
     * from `@spartacus/user` package.
     */
    requestForgotPasswordEmail(userEmailAddress: string): void;
    /**
     * Updates the user's email.
     *
     * @deprecated since 3.2, use `UserEmailFacade.update()` from `@spartacus/user` package.
     */
    updateEmail(password: string, newUid: string): void;
    /**
     * Returns the update user's email success flag.
     *
     * @deprecated since 3.2, subscribe to `UserEmailFacade.update()` from `@spartacus/user` package
     * to get the success state.
     */
    getUpdateEmailResultSuccess(): Observable<boolean>;
    /**
     * Returns the update user's email error flag.
     *
     * @deprecated since 3.2, subscribe to `UserEmailFacade.update()` from `@spartacus/user` package
     * to get the error state.
     */
    getUpdateEmailResultError(): Observable<boolean>;
    /**
     * Returns the update user's email loading flag.
     *
     * @deprecated since 3.2, subscribe to `UserEmailFacade.update()` from `@spartacus/user` package
     * to get the loading state.
     */
    getUpdateEmailResultLoading(): Observable<boolean>;
    /**
     * Resets the update user's email processing state.
     *
     * @deprecated since 3.2, no longer needed when you use `UserEmailFacade.update()`
     * from `@spartacus/user` package.
     */
    resetUpdateEmailResultState(): void;
    /**
     * Updates the password for the user.
     *
     * @param oldPassword the current password that will be changed
     * @param newPassword the new password
     *
     * @deprecated since 3.2, use `UserPasswordFacade.update()` from `@spartacus/user` package.
     */
    updatePassword(oldPassword: string, newPassword: string): void;
    /**
     * Returns the update password loading flag.
     *
     * @deprecated since 3.2, subscribe to `UserPasswordFacade.update()` from `@spartacus/user` package
     * to get the loading state.
     */
    getUpdatePasswordResultLoading(): Observable<boolean>;
    /**
     * Returns the update password failure outcome.
     *
     * @deprecated since 3.2, subscribe to `UserPasswordFacade.update()` from `@spartacus/user` package
     * to get the error state.
     */
    getUpdatePasswordResultError(): Observable<boolean>;
    /**
     * Returns the update password process success outcome.
     *
     * @deprecated since 3.2, subscribe to `UserPasswordFacade.update()` from `@spartacus/user` package
     * to get the success state.
     */
    getUpdatePasswordResultSuccess(): Observable<boolean>;
    /**
     * Resets the update password process state. The state needs to be reset after the process
     * concludes, regardless if it's a success or an error
     *
     * @deprecated since 3.2, no longer needed when you use `UserPasswordFacade.update()`
     * from `@spartacus/user` package.
     */
    resetUpdatePasswordProcessState(): void;
}
