/**
 * 聊天总结计数器管理器
 * 
 * 负责在LocalStorage中维护每个聊天的总结计数器
 * 避免频繁请求后端，提升性能
 */

const STORAGE_KEY = 'chat_summary_counters';

/**
 * 计数器数据结构
 * @typedef {Object} CounterData
 * @property {number} counter - 当前计数器值
 * @property {number} lastSummaryFloor - 最后一次总结的楼层
 * @property {number} updatedAt - 最后更新时间戳
 */

/**
 * 获取所有聊天的计数器数据
 * @returns {Object.<string, CounterData>}
 */
export function getAllCounters() {
  try {
    const data = localStorage.getItem(STORAGE_KEY);
    return data ? JSON.parse(data) : {};
  } catch (error) {
    console.error('[SummaryCounter] 读取计数器失败:', error);
    return {};
  }
}

/**
 * 获取指定聊天的计数器
 * @param {string} chatKey - 聊天键（格式：role_name/chat_name）
 * @returns {CounterData}
 */
export function getCounter(chatKey) {
  const allCounters = getAllCounters();
  return allCounters[chatKey] || {
    counter: 0,
    lastSummaryFloor: 0,
    updatedAt: Date.now()
  };
}

/**
 * 更新指定聊天的计数器
 * @param {string} chatKey - 聊天键
 * @param {Partial<CounterData>} updates - 更新的数据
 */
export function updateCounter(chatKey, updates) {
  try {
    const allCounters = getAllCounters();
    const current = allCounters[chatKey] || {
      counter: 0,
      lastSummaryFloor: 0,
      updatedAt: Date.now()
    };
    
    allCounters[chatKey] = {
      ...current,
      ...updates,
      updatedAt: Date.now()
    };
    
    localStorage.setItem(STORAGE_KEY, JSON.stringify(allCounters));
  } catch (error) {
    console.error('[SummaryCounter] 更新计数器失败:', error);
  }
}

/**
 * 增加计数器（当AI回复被用户确认时调用）
 * @param {string} chatKey - 聊天键
 * @param {number} increment - 增加的值（默认1）
 * @returns {number} 新的计数器值
 */
export function incrementCounter(chatKey, increment = 1) {
  const current = getCounter(chatKey);
  const newCounter = current.counter + increment;
  
  updateCounter(chatKey, { counter: newCounter });
  
  console.log(`[SummaryCounter] ${chatKey} 计数器: ${current.counter} -> ${newCounter}`);
  
  return newCounter;
}

/**
 * 重置计数器（总结完成后调用）
 * @param {string} chatKey - 聊天键
 * @param {number} lastSummaryFloor - 最后一次总结的楼层
 */
export function resetCounter(chatKey, lastSummaryFloor) {
  updateCounter(chatKey, {
    counter: 0,
    lastSummaryFloor
  });
  
  console.log(`[SummaryCounter] ${chatKey} 计数器已重置，lastSummaryFloor=${lastSummaryFloor}`);
}

/**
 * 检查是否应该触发总结
 * @param {string} chatKey - 聊天键
 * @param {number} interval - 总结间隔阈值
 * @returns {boolean}
 */
export function shouldTriggerSummary(chatKey, interval) {
  const current = getCounter(chatKey);
  return current.counter >= interval;
}

/**
 * 清除指定聊天的计数器
 * @param {string} chatKey - 聊天键
 */
export function clearCounter(chatKey) {
  try {
    const allCounters = getAllCounters();
    delete allCounters[chatKey];
    localStorage.setItem(STORAGE_KEY, JSON.stringify(allCounters));
    console.log(`[SummaryCounter] 已清除 ${chatKey} 的计数器`);
  } catch (error) {
    console.error('[SummaryCounter] 清除计数器失败:', error);
  }
}

/**
 * 清除所有计数器
 */
export function clearAllCounters() {
  try {
    localStorage.removeItem(STORAGE_KEY);
    console.log('[SummaryCounter] 已清除所有计数器');
  } catch (error) {
    console.error('[SummaryCounter] 清除所有计数器失败:', error);
  }
}

/**
 * 获取存储占用大小（字节）
 * @returns {number}
 */
export function getStorageSize() {
  const data = localStorage.getItem(STORAGE_KEY);
  return data ? new Blob([data]).size : 0;
}

/**
 * 格式化存储大小
 * @returns {string}
 */
export function getFormattedStorageSize() {
  const bytes = getStorageSize();
  if (bytes < 1024) return `${bytes} B`;
  if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(2)} KB`;
  return `${(bytes / (1024 * 1024)).toFixed(2)} MB`;
}
