import { db, type RecentFile } from './schema'
import { logError } from '../lib/errorHandler'

export const recentFilesRepository = {
  async add(filePath: string): Promise<void> {
    try {
      const existing: RecentFile | undefined = await db.recentFiles.where('filePath').equals(filePath).first()
      if (existing) {
        await db.recentFiles.update(existing.id!, { lastOpened: Date.now() })
      } else {
        await db.recentFiles.add({ filePath, lastOpened: Date.now() })
      }
      // L-06: 清理超过 50 条的旧记录
      const all: RecentFile[] = await db.recentFiles.orderBy('lastOpened').reverse().toArray()
      if (all.length > 50) {
        const toDelete = all.slice(50)
        await db.recentFiles.bulkDelete(toDelete.map((f: RecentFile) => f.id!))
      }
    } catch (error) {
      logError('添加最近文件失败', error)
    }
  },

  async getAll(limit: number = 20): Promise<string[]> {
    try {
      const files: RecentFile[] = await db.recentFiles
        .orderBy('lastOpened')
        .reverse()
        .limit(limit)
        .toArray()
      return files.map((f: RecentFile) => f.filePath)
    } catch (error) {
      logError('读取最近文件失败', error)
      return []
    }
  },

  async remove(filePath: string): Promise<void> {
    try {
      await db.recentFiles.where('filePath').equals(filePath).delete()
    } catch (error) {
      logError('删除最近文件失败', error)
    }
  },

  async clear(): Promise<void> {
    try {
      await db.recentFiles.clear()
    } catch (error) {
      logError('清空最近文件失败', error)
    }
  }
}
