import type { RegionConfig } from './type.js'; export interface UseRegionRedirectManagerOptions { /** * 地理位置信息 */ geo?: { country?: { code?: string; }; }; /** * 地区配置列表 */ regions: RegionConfig[]; /** * 国家到地区的映射 */ countryToRegionMap: Record; /** * 地区代码到路径前缀的映射 */ regionToPathMap: Record; /** * 当前站点的地区代码 */ currentRegionCode: string; /** * 当前站点的 locale */ locale?: string; /** * 当前路径 */ pathname: string; /** * 当前完整 URL */ currentUrl?: string; /** * 白名单路径(在白名单中不跳转) */ excludePaths?: string[]; /** * Cookie 名称 * @default 'user_region' */ cookieName?: string; /** * Cookie 过期天数 * @default 90 */ cookieExpireDays?: number; /** * 是否检查目标站点页面存在 * @default true */ checkPageExists?: boolean; /** * 页面存在检查的 API 端点 * @default '/api/check-page-exists' */ checkPageApiEndpoint?: string; /** * 地区检测回调 */ onDetectRegion?: (geo: any) => Promise; /** * 自定义 ref 参数前缀(用于自动跳转追踪) * @default 'geo_redirect_auto' * @example 'custom_tracking' */ refPrefix?: string; /** * 自定义 ref 参数前缀(用于手动切换站点追踪) * @default 'geo_redirect_manual' * @example 'user_switch' */ refPrefixManual?: string; } export interface UseRegionRedirectManagerReturn { /** * 地区选择弹窗是否打开 */ isRegionModalOpen: boolean; /** * 设置地区选择弹窗状态 */ setRegionModalOpen: (open: boolean) => void; /** * 保存地区选择 */ saveRegion: (regionCode: string, languageCode?: string) => void; /** * 保存的地区信息 */ savedRegion: any; /** * 检测到的地区信息 */ detectedRegion: any; /** * 横幅是否可见 */ bannerVisible: boolean; /** * 设置横幅可见性 */ setBannerVisible: (visible: boolean) => void; /** * 推荐的地区信息 */ recommendedRegion: (RegionConfig & { userCountry?: string; }) | null; /** * 用户是否手动关闭了横幅 */ userDismissedBanner: boolean; /** * "留在这里"按钮处理函数 */ handleStayHere: () => void; /** * "切换站点"按钮处理函数 */ handleSwitchSite: () => void; /** * 手动选择地区的回调 */ handleRegionSelect: (region: RegionConfig) => void; /** * ref 参数前缀(传递给 RegionSelectorModal) */ refPrefixManual?: string; } /** * 统一的地区重定向管理 Hook * * 整合了以下功能: * - IP 检测和地区推荐 * - Cookie 偏好记忆 * - 自动跳转处理 * - 横幅显示管理 * - 地区选择交互 * * @example * ```tsx * const { * isRegionModalOpen, * setRegionModalOpen, * bannerVisible, * recommendedRegion, * handleStayHere, * handleSwitchSite, * handleRegionSelect, * } = useRegionRedirectManager({ * geo, * regions, * countryToRegionMap, * regionToPathMap, * currentRegionCode, * locale, * pathname, * excludePaths, * }) * ``` */ export declare function useRegionRedirectManager(options: UseRegionRedirectManagerOptions): UseRegionRedirectManagerReturn;