import { ModuleWrapper, Result } from '@terra-js/common';
import { BaseModule } from '../BaseModule';
import { SearchProfileRequest, SearchProfileResult, RegisterProfileRequest, Address, Profile, OperationFlowConfig, AddressRequest, ChangeDealerResult, DeleteAddressRequest, CustomerTypeResult } from './types';
export default class UserModule implements BaseModule {
    wrappedModule: ModuleWrapper;
    constructor();
    /**
     * Get profile of user currently login to the App
     * @returns
     */
    getUserProfile: () => Promise<Result<Profile>>;
    /**
     * Update info of an user
     * @param request profile of the user currently login to the App
     * @returns
     */
    updateUserProfile: (profile: Profile) => Promise<Result<Profile>>;
    /**
     * Lookup customer based on keyword.
     * @param request
     * @returns
     */
    searchProfile: (request: SearchProfileRequest) => Promise<Result<SearchProfileResult>>;
    /**
     * Update info of customer.
     * @param request
     * @returns
     */
    upsertProfile: (profile: Profile) => Promise<Result<Profile>>;
    registerProfile: (request: RegisterProfileRequest) => Promise<Result<void>>;
    createNewAddress: (request: AddressRequest) => Promise<Result<Address>>;
    updateAddress: (request: AddressRequest) => Promise<Result<string>>;
    deleteAddress: (request: DeleteAddressRequest) => Promise<Result<string>>;
    /**
     * Get appFlow of the current login user
     * @returns
     */
    getOperationFlowConfig: () => Promise<Result<OperationFlowConfig>>;
    changeDealer: (request: {
        phone: string;
    }) => Promise<Result<ChangeDealerResult>>;
    fetchUserAddressList: () => Promise<Result<Address[]>>;
    getDetailProfile: (request: {
        id: string;
    }) => Promise<Result<Profile>>;
    publishCustomer: (customer: Profile) => Promise<Result<void>>;
    fetchCustomerTypes: () => Promise<Result<CustomerTypeResult>>;
}
