import type { AuthenticatedService } from '../core';
import type { BaseUser, IPurgeResponse, IUser, IUserAddress, IUserAddressParams, IUserPayment, IUserPaymentAddParams, IUserPaymentParams, IUserPaymentUpdateParams, IUserSessionParams } from '../interfaces';
import type { IApiResponseWithData } from '../types';
/**
 * A class representing a user service.
 */
export declare class UserService {
    private client;
    private readonly servicePath;
    constructor(client: AuthenticatedService);
    /**
     * Creates or updates a user session.
     *
     * @param {IUserSessionParams} params - The parameters for creating or updating a user session.
     * @returns {Promise<IApiResponseWithData<IUser>>} A promise that resolves to the user data.
     * @throws {Error} If the session creation/update request fails or if neither id nor email is provided.
     */
    createOrUpdateSession(params: IUserSessionParams): Promise<IApiResponseWithData<IUser>>;
    /**
     * Fetches user data from the API using the provided identifier.
     *
     * @param {string} identifier - The unique identifier for the user.
     * @return {Promise<IApiResponseWithData<BaseUser>>} The API response containing
     *  user data omitting the session field.
     */
    fetchUser(identifier: string): Promise<IApiResponseWithData<BaseUser>>;
    /**
     * Purges a user's data from the system.
     *
     * @param {string} identifier - The user's ID or email.
     * @returns {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the purge response.
     * @throws {Error} If the purge request fails or if the identifier is not provided.
     */
    purge(identifier: string): Promise<IApiResponseWithData<IPurgeResponse>>;
    /**
     * Adds a new address for a user.
     *
     * @param {IUserAddressParams} params - The parameters containing the user's address details.
     * @return {Promise<IApiResponseWithData<IUserAddress>>} - A promise that resolves with the API response containing the added user address.
     * @throws {Error} If the addAddress request fails or if the required parameters are not provided.
     */
    addAddress(params: IUserAddressParams): Promise<IApiResponseWithData<IUserAddress>>;
    /**
     * Updates or creates a new address for a user.
     *
     * @param {IUserAddressParams} params - The parameters for updating or creating an address.
     * @returns {Promise<IApiResponseWithData<IUserAddress>>} A promise that resolves to the updated or created address.
     * @throws {Error} If the address update request fails or if required parameters are missing.
     */
    updateAddress(params: IUserAddressParams): Promise<IApiResponseWithData<IUserAddress>>;
    /**
     * Validates the parameters required for updating a user address.
     *
     * @param {IUserAddressParams} params - The parameters to be validated for the address update. This should include
     * at least the user ID and one of the following: address object, latitude and longitude, or a Google places ID.
     * @return {IUserAddressParams} Throws an error if the required parameters are not provided.
     */
    private validateAddressParams;
    /**
     * Checks if the given user address parameters contain valid customer ID and user ID.
     *
     * @param {IUserAddressParams} params - The user address parameters object containing customerId and userId.
     * @return {boolean} - Returns true if the customerId or userId is missing or not a string, otherwise returns false.
     */
    private hasUser;
    /**
     * Checks if the given user address object has a valid address.
     *
     * @param {IUserAddressParams} params - The user address parameters object containing address details.
     *
     * @return {boolean} Returns true if the user address object is valid; otherwise, returns false.
     */
    private hasUserAddressObj;
    /**
     * Checks if the user address coordinates (latitude and longitude) are not present or not of type 'number'.
     *
     * @param {IUserAddressParams} params - The user address parameters containing latitude and longitude.
     * @return {boolean} Returns true if latitude or longitude are not provided or are not numbers, otherwise returns false.
     */
    private hasUserAddressCoords;
    /**
     * Checks whether the user address parameters contain a valid placesId.
     *
     * @param {IUserAddressParams} params - The user address parameters containing placesId.
     * @return {boolean} Returns true if placesId is missing or not a string, false otherwise.
     */
    private hasUserAddressPlacesId;
    /**
     * Purges an address for a user.
     *
     * @param {string} addressId - The ID of the address to purge.
     * @returns {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the purge response.
     * @throws {Error} If the address purge request fails or if the address ID is not provided.
     */
    purgeAddress(addressId: string): Promise<IApiResponseWithData<IPurgeResponse>>;
    /**
     * Adds a new payment method for a user.
     *
     * @param {IUserPaymentParams} params - The parameters required to add a payment method.
     * @param {string} params.customerId - The ID of the customer.
     * @param {string} params.paymentMethodId - The ID of the payment method.
     * @param {boolean} params.isDefault - Indicates whether the new payment method should be marked as default.
     * @return {Promise<IApiResponseWithData<IUserPayment>>} - A promise that resolves to the response containing user payment information.
     * @throws {Error} - Throws an error if required parameters are missing or if the request fails.
     */
    addPayment(params: IUserPaymentAddParams): Promise<IApiResponseWithData<IUserPayment>>;
    /**
     * Updates whether default payment method for a user.
     *
     * @param {IUserPaymentParams} params - The payment parameters required to update payment. Must include `customerId`,
     *  `paymentMethodId`.
     * @returns {Promise<IApiResponseWithData<boolean>>} - A promise that resolves to the API response containing
     *  the updated payment information.
     * @throws {Error} - Throws an error if required parameters are missing or the request fails.
     */
    updatePayment(params: IUserPaymentParams | IUserPaymentUpdateParams): Promise<IApiResponseWithData<boolean>>;
    /**
     * Purges a payment record for a specified customer.
     *
     * @param {string} customerId - The ID of the customer whose payment record is to be purged.
     * @param {string} paymentId - The ID of the payment record to be purged.
     * @return {Promise<IApiResponseWithData<IPurgeResponse>>} A promise that resolves to the response of the purge request.
     */
    purgePayment(customerId: string, paymentId: string): Promise<IApiResponseWithData<IPurgeResponse>>;
}
