import React, { useEffect } from 'react';

import { useNavigate, useSearchParams } from 'react-router-dom';

import { userConfigModel } from '@/models/userConfigModel';
import { removeToken, setToken } from '@/utils/authUtils';
import { decryptUrlParams } from '@/utils/requestCrypto';

/**
 * 解密重定向参数
 * @param _encryptedData 加密的重定向参数
 * @returns 解密后的数据，包含 UserInfo 和路由信息
 */
const decryptRedirectParams = async (
    _encryptedData: string
): Promise<{ accessToken: string; expireTime: number; redirectPath: string } | null> => {
    return decryptUrlParams<{ accessToken: string; expireTime: number; redirectPath: string }>(
        _encryptedData
    );
};

const Redirect: React.FC = () => {
    const navigate = useNavigate();
    const [searchParams] = useSearchParams();

    const { setUserConfig } = userConfigModel.useModel();

    useEffect(() => {
        const redirectParam = searchParams.get('d');
        console.log('🚀 ~ Redirect ~ redirectParam:', redirectParam);

        // 如果没有重定向参数，默认跳转到 home 页
        if (!redirectParam) {
            navigate('/home', { replace: true });
            return;
        }

        // 如果有重定向参数，解密并处理
        const handleRedirect = async () => {
            try {
                // 解密重定向参数
                const decryptedData = await decryptRedirectParams(redirectParam);
                console.log('🚀 ~ handleRedirect ~ decryptedData:', decryptedData);
                if (!decryptedData) {
                    // 解密失败，跳转到 home 页
                    navigate('/home', { replace: true });
                    return;
                }

                const { accessToken, expireTime, redirectPath } = decryptedData;

                // 保存用户信息到 localStorage
                if (accessToken) {
                    removeToken(); // 删除旧的 token
                    setToken({ accessToken, accessExpires: expireTime }); // 设置新的 token
                    setUserConfig(null); // 清除用户信息
                }

                // 跳转到指定路由
                navigate(redirectPath || '/home', { replace: true });
            } catch (error) {
                console.error('处理重定向参数失败:', error);
                // 出错时跳转到 home 页
                navigate('/home', { replace: true });
            }
        };

        handleRedirect();
    }, [navigate, searchParams, setUserConfig]);

    // 空白页面，不显示任何内容
    return null;
};

export default Redirect;
