import { session } from 'electron'
import logger from './logger.js'

/**
 * 清除所有会话数据的统一函数
 * @param {string} context - 清理上下文，用于日志记录
 * @returns {Promise<void>}
 */
export async function clearAllSessionData(context = 'unknown') {
  logger.info(`[${context}] 开始清除所有会话数据`);
  
  try {
    await new Promise((resolve, reject) => {
      session.defaultSession.clearStorageData({
        storages: [
          'appcache',
          'cookies',
          'filesystem',
          'indexdb',
          'localstorage',
          'shadercache',
          'websql',
          'serviceworkers',
          'cachestorage'
        ]
      }, (error) => {
        if (error) {
          logger.error(`[${context}] 清除会话数据失败:`, error);
          reject(error);
        } else {
          logger.info(`[${context}] 会话数据清除成功`);
          resolve();
        }
      });
    });

    // 强制同步日志
    logger.info(`[${context}] 缓存清理完成`);
    
    // 等待一小段时间确保日志写入
    await new Promise(resolve => setTimeout(resolve, 100));
    
  } catch (error) {
    logger.error(`[${context}] 清理缓存失败:`, error);
    throw error;
  }
}

/**
 * 清除所有窗口的浏览器缓存
 * @param {string} context - 清理上下文，用于日志记录
 * @returns {Promise<void>}
 */
export async function clearAllWindowsCache(context = 'unknown') {
  logger.info(`[${context}] 开始清除所有窗口的浏览器缓存`);
  
  try {
    const { BrowserWindow } = require('electron');
    const windows = BrowserWindow.getAllWindows();
    
    for (const window of windows) {
      const session = window.webContents.session;
      await new Promise((resolve, reject) => {
        session.clearStorageData({
          storages: [
            'appcache',
            'cookies',
            'filesystem',
            'indexdb',
            'localstorage',
            'shadercache',
            'websql',
            'serviceworkers',
            'cachestorage'
          ]
        }, (error) => {
          if (error) {
            logger.error(`[${context}] 清除窗口缓存失败:`, error);
            reject(error);
          } else {
            resolve();
          }
        });
      });
    }

    logger.info(`[${context}] 所有窗口缓存清除成功`);
    
  } catch (error) {
    logger.error(`[${context}] 清除窗口缓存失败:`, error);
    throw error;
  }
} 