import { XapiAuthSMS } from "@selldone/sdk-storefront/auth/sms/XapiAuthSMS";
import { Customer } from "@selldone/core-js/models";
/**
 * Verifies the OTP (One-Time Password) received by the user.
 *
 * This method sends the user's OTP to the specified endpoint for verification. It's typically
 * used to confirm the user's phone number in processes like two-factor authentication or
 * phone number verification.
 *
 * @param {string | number} dial_code - The dial code of the country/region (e.g., +1 for the US).
 * @param {string} country_code - The ISO code of the country (e.g., 'US' for the United States).
 * @param {string | number} phone - The phone number for which the OTP was requested.
 * @param {string | number} verification_code - The OTP received by the user.
 * @param {Customer.Source} source - The origin of the OTP request, either 'customer' or 'vendor'.
 *
 * @returns {Promise<ISMSVerifyOTPServerResponse>} - Returns a promise that resolves with the
 *                                                    server's response to the OTP verification.
 *
 * @example
 *
 * verifyOTP('+1', 'US', '1234567890', '123456', Customer.Source.CUSTOMER)
 *   .then(response => console.log(response))
 *   .catch(error => console.error(error));
 *
 */
export default function XapiAuthSMSVerifyOtp(this: XapiAuthSMS, dial_code: string | number, country_code: string, phone: string | number, verification_code: string | number, source: Customer.Source | null): Promise<XapiAuthSMSVerifyOtpTypes.IRegisterResponse | XapiAuthSMSVerifyOtpTypes.ISelectUserResponse | XapiAuthSMSVerifyOtpTypes.ILoginResponse>;
export declare namespace XapiAuthSMSVerifyOtpTypes {
    export interface IRegisterResponse extends ISMSVerifyOTPServerResponse {
        method: Method.REGISTER;
        code: string;
    }
    export interface ISelectUserResponse extends ISMSVerifyOTPServerResponse {
        method: Method.SELECT;
        users: IUser[];
    }
    export interface ILoginResponse extends ISMSVerifyOTPServerResponse {
        method: Method.LOGIN;
        token: string;
        expires_in: number;
    }
    export interface ISMSVerifyOTPServerResponse {
        method: Method;
    }
    /**
     * Interface representing the server's response to an OTP (One-Time Password) verification request.
     *
     * The response provides details on the verification method (e.g., whether it led to registration,
     * login, or required user selection due to multiple users with the same phone number).
     * Depending on the method, additional fields such as `token`, `expires_in`, or `users` may be included.
     *
     * @property {Method} method - Indicates the method of OTP verification.
     *
     * @property {string} [token] - Access token provided for authentication.
     *                              Typically available when `method` is `LOGIN`.
     *
     * @property {string} expires_in - Specifies the duration (often in seconds)
     *                                 for which the provided `token` remains valid.
     *
     * @property {Array<{id:number, name:string, email:string|number, code:string}>} [users] -
     *           List of users associated with the phone number used for verification.
     *           This is typically provided when multiple users are associated with the same phone number,
     *           and the `method` is `SELECT`.
     *
     * @example
     *
     * const response: ISMSVerifyOTPServerResponse = {
     *   method: Method.LOGIN,
     *   token: 'abcdef123456',
     *   expires_in: '3600'
     * };
     *
     */
    interface IUser {
        id: number;
        name: string;
        email: string | number;
        code: string;
    }
    /**
     * Enum representing the possible methods of OTP (One-Time Password) verification success.
     *
     * The methods include:
     * - `REGISTER`: A new user has been registered. The next step typically requires the user to enter their email.
     * - `SELECT`: There are multiple users with the same phone number, and the user needs to select one.
     * - `LOGIN`: The user is authenticated, and an access token is returned.
     *
     */
    export enum Method {
        REGISTER = "register",
        SELECT = "select",
        LOGIN = "login"
    }
    export {};
}
