/**
 * SessionStorage存储策略
 * 将数据保存在浏览器的sessionStorage中，标签页关闭后数据丢失
 */
class SessionStorage {
  constructor(key) {
    this.key = `hxhq_session_${key}`;
    this.historyKey = `hxhq_session_history_${key}`;
  }

  /**
   * 保存数据到sessionStorage
   * @param {string} content - 要保存的内容
   * @returns {Promise<object>} 保存结果
   */
  async save(content) {
    try {
      const timestamp = Date.now();
      const version = this.getNextVersion();
      const data = {
        content,
        timestamp,
        version
      };

      sessionStorage.setItem(this.key, JSON.stringify(data));
      this.saveToHistory(data);

      return {
        success: true,
        timestamp,
        version,
        storage: 'sessionStorage'
      };
    } catch (error) {
      return {
        success: false,
        error: error.message,
        storage: 'sessionStorage'
      };
    }
  }

  /**
   * 从sessionStorage加载数据
   * @returns {Promise<object>} 加载的数据
   */
  async load() {
    try {
      const dataStr = sessionStorage.getItem(this.key);
      const data = dataStr ? JSON.parse(dataStr) : null;
      
      return {
        success: true,
        data,
        storage: 'sessionStorage'
      };
    } catch (error) {
      return {
        success: false,
        error: error.message,
        storage: 'sessionStorage'
      };
    }
  }

  /**
   * 获取历史版本
   * @returns {Promise<Array>} 历史版本列表
   */
  async getHistory() {
    try {
      const historyStr = sessionStorage.getItem(this.historyKey);
      const history = historyStr ? JSON.parse(historyStr) : [];
      
      return {
        success: true,
        data: history,
        storage: 'sessionStorage'
      };
    } catch (error) {
      return {
        success: false,
        error: error.message,
        storage: 'sessionStorage'
      };
    }
  }

  /**
   * 保存到历史记录
   * @param {object} data - 要保存的数据
   */
  saveToHistory(data) {
    try {
      const historyStr = sessionStorage.getItem(this.historyKey);
      let history = historyStr ? JSON.parse(historyStr) : [];
      
      history.unshift({...data});
      
      if (history.length > 100) {
        history = history.slice(0, 100);
      }
      
      sessionStorage.setItem(this.historyKey, JSON.stringify(history));
    } catch (error) {
      console.error('保存历史记录失败:', error);
    }
  }

  /**
   * 获取下一个版本号
   * @returns {number} 版本号
   */
  getNextVersion() {
    try {
      const dataStr = sessionStorage.getItem(this.key);
      if (!dataStr) return 1;
      
      const data = JSON.parse(dataStr);
      return data.version + 1;
    } catch (error) {
      return 1;
    }
  }
}

export default SessionStorage;