import { Tray, Menu, app, BrowserWindow, shell } from 'electron'
import { join } from 'path'
import icon from '../../resources/icon.png?asset'
import { getMainWindow, createWindow, createApiConfigWindow, createConfigWindow ,getDragWindow} from './window.js'
import { getStoreValue, setStoreValue, clearStore } from './store.js'
import { createDrageWindow, getDrageWindow } from './window.js'
import logger from './utils/logger'
import { clearAllWindowsCache } from './utils/cacheUtils.js'
import fs from 'fs'
import path from 'path'

let tray = null

import {checkForUpdates} from "./utils/updateUtils"

// 安全重启应用函数
function safeRestartApp() {
  return new Promise((resolve) => {
    try {
      logger.info('开始安全重启应用')
      
      // 标记为正在重启，避免其他退出逻辑干扰
      app.isRestarting = true
      
      // 确保所有窗口都被正确关闭
      const windows = BrowserWindow.getAllWindows()
      logger.info(`准备关闭 ${windows.length} 个窗口`)
      
      windows.forEach(window => {
        if (!window.isDestroyed()) {
          try {
            window.close()
            logger.info('窗口关闭成功')
          } catch (error) {
            logger.warn('关闭窗口时出错:', error)
          }
        }
      })
      
      // 延迟执行重启，确保窗口关闭完成
      setTimeout(() => {
        try {
          logger.info('执行应用重启')
          app.relaunch()
          app.exit(0)
          resolve(true)
        } catch (error) {
          logger.error('重启应用失败，尝试强制退出:', error)
          try {
            app.quit()
          } catch (quitError) {
            logger.error('强制退出也失败:', quitError)
            process.exit(0)
          }
          resolve(false)
        }
      }, 1000) // 增加延迟时间到1秒
      
    } catch (error) {
      logger.error('安全重启失败:', error)
      try {
        app.quit()
      } catch (quitError) {
        logger.error('强制退出失败:', quitError)
        process.exit(0)
      }
      resolve(false)
    }
  })
}

export async function clearBrowserCache() {
  try {
    // 使用统一的缓存清理函数
    await clearAllWindowsCache('tray-clear-cache');
  } catch (error) {
    logger.error('清除浏览器缓存失败:', error)
  }
}

export function createTray() {
  // 防止重复创建托盘
  if (tray) {
    logger.info('托盘已存在，跳过创建')
    return
  }

  logger.info('开始创建托盘图标')
  // 创建托盘图标
  tray = new Tray(icon)

  // 设置托盘图标的提示文本
  tray.setToolTip('Dify Market Manager')

  // 创建右键菜单
  const contextMenu = Menu.buildFromTemplate([
    {
      label: '显示主窗口',
      click: () => {
        const mainWindow = getMainWindow()
        if (mainWindow) {
          mainWindow.show()
        } else {
          createWindow()
        }
      }
    },
    {
      label: '隐藏主窗口',
      click: () => {
        const mainWindow = getMainWindow()
        if (mainWindow) {
          mainWindow.hide()
        }
      }
    },
    { type: 'separator' },
    {
      label: '配置',
      submenu: [
        { type: 'separator' },
        {
          label: '配置客户端地址',
          click: () => {
            createConfigWindow()
          }
        }
      ]
    },
    { type: 'separator' },
    {
      label: '显示隐藏桌面悬浮',
      click: () => {
        const drageWindow = getDrageWindow()
        if (!drageWindow) {
          createDrageWindow()
        } else {
          if (drageWindow.isVisible()) {
            drageWindow.hide()
            setStoreValue('showDrageWindow', false)
          } else {
            drageWindow.show()
            setStoreValue('showDrageWindow', true)
          }
        }



      }
    },
    { type: 'separator' },
    {
      label: '检查更新',
      click: async (menuItem) => {
          checkForUpdates(menuItem,true)
      }
    },


    { type: 'separator' },
    {
      label: '退出登录',
      click: async () => {
        await clearBrowserCache()
        // 重新加载主窗口
        const mainWindow = getMainWindow()
        if (mainWindow) {
          mainWindow.reload()
        }
        logger.info('用户已退出登录')
      }
    },
    { type: 'separator' },
    {
      label: '退出应用',
      click: () => {
        logger.info('用户点击退出应用')
        app.isQuiting = true
        
        // 确保所有窗口都被关闭
        const windows = BrowserWindow.getAllWindows()
        logger.info(`准备关闭 ${windows.length} 个窗口`)
        
        windows.forEach(window => {
          if (!window.isDestroyed()) {
            try {
              window.destroy()
              logger.info('窗口销毁成功')
            } catch (error) {
              logger.warn('销毁窗口时出错:', error)
            }
          }
        })
        
        // 延迟执行退出，确保窗口销毁完成
        setTimeout(() => {
          try {
            logger.info('执行应用退出')
            // 使用 exit 而不是 quit，确保完全退出
            app.exit(0)
          } catch (error) {
            logger.error('应用退出失败，尝试强制退出:', error)
            try {
              process.exit(0)
            } catch (processError) {
              logger.error('强制退出也失败:', processError)
              // 最后的强制退出
              process.kill(process.pid, 'SIGKILL')
            }
          }
        }, 500) // 延迟500ms确保窗口销毁完成
      }
    }
  ])

  // 设置托盘图标的右键菜单
  tray.setContextMenu(contextMenu)

  // 点击托盘图标时显示/隐藏主窗口
  tray.on('click', () => {
    const mainWindow = getMainWindow()
    if (mainWindow) {
      if (mainWindow.isVisible()) {
        mainWindow.hide()
      } else {
        mainWindow.show()
      }
    } else {
      createWindow()
    }
  })
}

export function destroyTray() {
  if (tray) {
    logger.info('销毁托盘图标')
    tray.destroy()
    tray = null
    logger.info('托盘图标已销毁')
  } else {
    logger.info('托盘图标不存在，无需销毁')
  }
}
