import { AuthClient } from '../lib/auth-client';
import { AuthLocale } from '../lib/auth-locale';
import { AuthPlugin } from '../lib/auth-plugin';
import { BasePaths } from '../lib/base-paths';
import { DeepPartial } from '../lib/deep-partial';
import { Localization } from '../lib/localization';
import { ViewPaths } from '../lib/view-paths';
import { AdditionalFields } from './additional-fields-config';
import { AvatarConfig } from './avatar-config';
import { EmailAndPasswordConfig } from './email-and-password-config';
import { AuthSocialProvider } from './social-provider-config';
export type SocialSignInMode = "redirect" | "popup";
/**
 * Core authentication configuration interface.
 *
 * Defines the base structure for authentication settings including paths,
 * providers, navigation functions, and feature flags.
 */
export interface AuthConfig<TAuthClient extends AuthClient = AuthClient> {
    /**
     * The Better Auth client instance used for authentication operations.
     */
    authClient: TAuthClient;
    /**
     * Additional user fields rendered on sign-up and the user profile.
     * @remarks `AdditionalFields`
     */
    additionalFields?: AdditionalFields;
    /**
     * Avatar upload, optimization, and deletion configuration.
     * @remarks `AvatarConfig`
     * @default { enabled: true, resize: resizeAvatar, size: 256, extension: "png" }
     */
    avatar: AvatarConfig;
    /**
     * Base paths for different application sections
     * @remarks `BasePaths`
     */
    basePaths: BasePaths;
    /**
     * Base URL for API endpoints (optional)
     * @default ""
     */
    baseURL: string;
    /**
     * Email and password authentication configuration
     * @remarks `EmailAndPasswordConfig`
     */
    emailAndPassword: EmailAndPasswordConfig;
    /**
     * Localization strings for UI components
     * @remarks `Localization`
     */
    localization: Localization;
    /**
     * Language metadata and translated messages for all auth components.
     * @remarks `AuthLocale`
     * @default `defaultAuthLocale`
     */
    locale: AuthLocale;
    /**
     * Registered auth plugins. UI packages widen the element type via the
     * `AuthPluginRegister` module-augmentation slot.
     * @remarks `AuthPlugin[]`
     * @default []
     */
    plugins: AuthPlugin[];
    /**
     * Default redirect path after successful authentication
     * @default "/"
     */
    redirectTo: string;
    /**
     * Allow users to link multiple accounts from the same social provider.
     * When false, providers already linked to the account are hidden from the available-to-link list.
     * @default true
     */
    multipleAccountsPerProvider?: boolean;
    /**
     * Allow the UI to unlink the final sign-in account.
     *
     * Enable this only when Better Auth's
     * `account.accountLinking.allowUnlinkingAll` option is also enabled.
     * @default false
     */
    allowUnlinkingAllAccounts?: boolean;
    /**
     * List of enabled social authentication providers
     * Built-in providers can use their string ID. Custom and Generic OAuth
     * providers use `{ id, label, icon }`.
     * @remarks `AuthSocialProvider[]`
     */
    socialProviders?: AuthSocialProvider[];
    /**
     * How social sign-in opens the provider flow.
     * Popup mode requires Better Auth's experimental `oauthPopupClient` action.
     * @default "redirect"
     */
    socialSignInMode: SocialSignInMode;
    /**
     * View path mappings for different authentication views
     * @remarks `ViewPaths`
     */
    viewPaths: ViewPaths;
    /**
     * Function to navigate to a new path
     * @param options - Navigation options with href and optional replace flag
     * @default window.location.href = href (or window.location.replace if replace: true)
     * @example
     * // TanStack Router
     * navigate={navigate}
     * // Next.js
     * navigate={({href, replace}) => replace ? router.replace(href) : router.push(href)}
     */
    navigate: (options: {
        to: string;
        replace?: boolean;
    }) => void;
}
export declare const defaultAuthConfig: Omit<AuthConfig, "authClient">;
export type AuthConfigOptions<TAuthClient extends AuthClient = AuthClient> = DeepPartial<Omit<AuthConfig<TAuthClient>, "authClient" | "locale">> & {
    authClient: TAuthClient;
    /** Imported locale bundle. Defaults to English (`en-US`). */
    locale?: AuthLocale;
};
/** Resolves defaults, locale messages, plugin messages, and consumer overrides. */
export declare function resolveAuthConfig<TAuthClient extends AuthClient = AuthClient>(options: AuthConfigOptions<TAuthClient>): AuthConfig<TAuthClient>;
