import { defineStore } from 'pinia';
import { ref } from 'vue';
import type { StorageLike } from 'pinia-plugin-persistedstate';

// 为 UniApp 创建适配的 storage（与 store/index.ts 保持一致）
const uniStorage: StorageLike = {
    getItem: (key: string): string | null => {
        try {
            return uni.getStorageSync(key);
        } catch (error) {
            console.error('读取存储失败:', error);
            return null;
        }
    },
    setItem: (key: string, value: string): void => {
        try {
            uni.setStorageSync(key, value);
        } catch (error) {
            console.error('写入存储失败:', error);
        }
    },
};

// 判断当前是测试版还是正式版
const accountInfo = uni.getAccountInfoSync();
const prefixMap = {
    release: 'prod_', // production的缩写
    trial: 'beta_', // beta测试版
    develop: 'dev_', // development的缩写
};

const SWITCH_STORE_KEY = `${prefixMap[accountInfo?.miniProgram?.envVersion] || 'dev_'}switch_store`;

/**
 * Switch页面跳转参数存储接口
 */
export interface SwitchPageParams {
    [key: string]: {
        data: any; // 存储的参数数据
        timestamp: number; // 存储时间戳
        expire?: number; // 过期时间（毫秒），可选
    };
}

/**
 * Switch页面跳转参数存储Store
 * 用于在小程序switch页面跳转时传递参数
 * 简化版：只保留基于页面路径的方法，获取数据后自动清除
 */
export const useSwitchStore = defineStore(
    'switch',
    () => {
        // 存储所有switch页面跳转参数
        const switchParams = ref<SwitchPageParams>({});

        /**
         * 为指定页面路径设置参数
         * @param pagePath 目标页面路径（如：'/pages/switch/index1'）
         * @param data 要存储的参数数据
         * @param expire 过期时间（毫秒），默认1分钟
         */
        const setParamsForPage = (pagePath: string, data: any, expire: number = 1 * 60 * 1000): void => {
            const params = {
                data,
                timestamp: Date.now(),
                expire,
            };

            // 使用页面路径作为键存储
            switchParams.value[pagePath] = params;
        };

        /**
         * 获取指定页面路径的参数
         * @param pagePath 目标页面路径（如：'/pages/switch/index1'）
         * @returns 存储的参数数据，如果不存在或已过期则返回null
         */
        const getAndClearParamsForPage = (pagePath: string): any => {
            // 从内存中获取
            const params = switchParams.value[pagePath];

            // 检查参数是否存在
            if (!params) {
                return null;
            }

            // 检查是否过期
            const { data, timestamp, expire } = params;
            // if (expire && Date.now() - timestamp > expire) {
            //     // 清理过期数据
            //     delete switchParams.value[pagePath];
            //     return null;
            // }

            // // 获取数据后清理
            // delete switchParams.value[pagePath];

            return data;
        };

        /**
         * 清除指定页面路径的参数
         * @param pagePath 目标页面路径（如：'/pages/switch/index1'）
         */
        const clearParamsForPage = (pagePath: string): void => {
            // 从内存中删除
            delete switchParams.value[pagePath];
        };

        /**
         * 清理所有过期的switch页面跳转参数
         */
        const cleanupExpiredParams = (): void => {
            const now = Date.now();

            // 清理内存中的过期参数
            Object.keys(switchParams.value).forEach((key) => {
                const params = switchParams.value[key];
                if (params.expire && now - params.timestamp > params.expire) {
                    delete switchParams.value[key];
                }
            });
        };

        return {
            // 状态
            switchParams,

            // 方法
            setParamsForPage,
            getAndClearParamsForPage,
            clearParamsForPage,
            cleanupExpiredParams,
        };
    },
    {
        // 启用持久化
        persist: {
            key: SWITCH_STORE_KEY,
            storage: uniStorage,
        },
    }
);
