/**
 * 安全的 JSON 解析工具
 * 用于处理 sessionStorage 中的数据解析，避免 "Unexpected end of JSON input" 错误
 */

/**
 * 安全地解析 JSON 字符串
 * @param {string} jsonString - 要解析的 JSON 字符串
 * @param {any} defaultValue - 解析失败时的默认值
 * @returns {any} 解析结果或默认值
 */
export function safeJsonParse(jsonString, defaultValue = null) {
  if (!jsonString) {
    return defaultValue
  }

  try {
    return JSON.parse(jsonString)
  } catch (error) {
    console.error('Error parsing JSON:', error, 'Input:', jsonString)
    return defaultValue
  }
}

/**
 * 安全地从 Session 获取并解析数据
 * @param {Object} session - Session 实例
 * @param {string} key - 数据键名
 * @param {boolean} flag - 是否加密
 * @param {any} defaultValue - 解析失败时的默认值
 * @returns {any} 解析结果或默认值
 */
export function safeSessionGet(session, key, flag = false, defaultValue = null) {
  try {
    const data = session.Get(key, flag)
    return safeJsonParse(data, defaultValue)
  } catch (error) {
    console.error(`Error getting session data for key "${key}":`, error)
    return defaultValue
  }
}

/**
 * 安全地获取用户信息
 * @param {Object} session - Session 实例
 * @returns {Object|null} 用户信息对象或 null
 */
export function safeGetUser(session) {
  return safeSessionGet(session, 'user', true, null)
}

/**
 * 安全地获取权限信息
 * @param {Object} session - Session 实例
 * @returns {Object} 权限信息对象或空对象
 */
export function safeGetDisplay(session) {
  return safeSessionGet(session, 'display', true, {})
}

/**
 * 安全地获取菜单信息
 * @param {Object} session - Session 实例
 * @returns {Array} 菜单信息数组或空数组
 */
export function safeGetMenus(session) {
  return safeSessionGet(session, 'menus', true, [])
}
