/**
 * 内存存储策略
 * 将数据保存在内存中，页面刷新后数据丢失
 */
class MemoryStorage {
  constructor(key) {
    this.key = `hxhq_memory_${key}`;
    this.storage = new Map(); // 使用Map存储多个key的数据
    this.history = new Map(); // 存储历史版本
  }

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

      // 保存当前版本
      this.storage.set(this.key, data);

      // 保存到历史记录（限制最多保存20个历史版本）
      if (!this.history.has(this.key)) {
        this.history.set(this.key, []);
      }
      const history = this.history.get(this.key);
      history.unshift({...data});
      if (history.length > 20) {
        history.pop();
      }

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

  /**
   * 从内存加载数据
   * @returns {Promise<object>} 加载的数据
   */
  async load() {
    try {
      const data = this.storage.get(this.key);
      return {
        success: true,
        data: data || null,
        storage: 'memory'
      };
    } catch (error) {
      return {
        success: false,
        error: error.message,
        storage: 'memory'
      };
    }
  }

  /**
   * 获取历史版本
   * @returns {Promise<Array>} 历史版本列表
   */
  async getHistory() {
    try {
      const history = this.history.get(this.key) || [];
      return {
        success: true,
        data: history,
        storage: 'memory'
      };
    } catch (error) {
      return {
        success: false,
        error: error.message,
        storage: 'memory'
      };
    }
  }

  /**
   * 获取下一个版本号
   * @returns {number} 版本号
   */
  getNextVersion() {
    const current = this.storage.get(this.key);
    return current ? current.version + 1 : 1;
  }
}

export default MemoryStorage;