/**
 * 文件系统类型定义
 * @module file-system
 */

/**
 * 文件项
 */
export interface FileItem {
  /** 文件名 */
  name: string
  /** 完整路径 */
  path: string
  /** 文件大小（字节） */
  size: number
  /** 是否为目录 */
  isDir: boolean
  /** 修改时间 */
  modified_time?: string
  /** 是否被收藏（运行时属性） */
  is_favorite?: boolean
  /** 旧路径（仅重命名操作时存在） */
  old_path?: string
}

/**
 * 收藏文件
 */
export interface FavoriteFile extends FileItem {
  /** 添加时间（时间戳） */
  addedAt: number
  /** 置顶时间（时间戳），undefined 表示未置顶 */
  pinnedAt?: number
}

/**
 * 文件类型枚举
 */
export enum FileType {
  /** 图片 */
  Image = 'image',
  /** 视频 */
  Video = 'video',
  /** 音频 */
  Audio = 'audio',
  /** PDF */
  Pdf = 'pdf',
  /** HTML */
  Html = 'html',
  /** Markdown */
  Markdown = 'markdown',
  /** 代码 */
  Code = 'code',
  /** 文本 */
  Text = 'text',
  /** 二进制 */
  Binary = 'binary'
}

/**
 * 拖拽状态
 */
export interface DraggingState {
  /** 是否正在拖拽 */
  isDragging: boolean
  /** 被拖拽项的索引 */
  draggedIndex: number
  /** 按下的项索引 */
  pressedIndex: number
}

/**
 * 面板宽度配置
 */
export interface PanelWidth {
  /** 左侧面板宽度（百分比） */
  left: number
  /** 右侧面板宽度（百分比） */
  right: number
}

/**
 * 快捷路径
 */
export interface ShortcutPath {
  /** 显示名称 */
  name: string
  /** 路径 */
  path: string
}

/**
 * 工具栏配置
 */
export interface ToolbarConfig {
  /** 当前文件路径 */
  filePath: string
  /** 路径历史记录 */
  pathHistory: string[]
  /** 常用路径列表 */
  commonPaths: ShortcutPath[]
  /** 是否在 ZIP 浏览模式 */
  isBrowsingZip: boolean
  /** 显示路径（ZIP 模式下） */
  displayPath: string
  /** ZIP 文件名 */
  zipFileName: string
  /** ZIP 面包屑 */
  zipBreadcrumbs: ZipBreadcrumbItem[]
  /** 文件加载中 */
  fileLoading: boolean
  /** 是否显示侧边栏 */
  showSidebar: boolean
  /** 排序字段 */
  sortBy: string
  /** 排序方向 */
  sortOrder: string
  /** 搜索关键词 */
  searchKeyword: string
}

/**
 * 侧边栏配置
 */
export interface SidebarConfig {
  /** 是否可见 */
  visible: boolean
  /** 收藏文件列表 */
  favoriteFiles: FavoriteFile[]
  /** 拖拽状态 */
  draggingState: DraggingState
}

/**
 * 文件列表面板配置
 */
export interface FileListPanelConfig {
  /** 文件列表 */
  fileList: FileItem[]
  /** 文件加载中 */
  fileLoading: boolean
  /** 选中的文件项 */
  selectedFileItem: FileItem | null
  /** 正在编辑的文件路径 */
  editingFilePath: string
  /** 编辑中的文件名 */
  editingFileName: string
}

/**
 * 文件编辑器面板配置
 */
export interface FileEditorPanelConfig {
  /** 当前文件名 */
  currentFileName: string
  /** 当前文件完整路径 */
  currentFileFullPath: string
  /** 预览 URL */
  previewUrl: string
  /** 文件内容 */
  fileContent: string
  /** 渲染后的内容（HTML/Markdown） */
  rendered: string
  /** 是否在编辑模式 */
  isEditMode: boolean
  /** 文件内容区域高度 */
  fileContentHeight: number
  /** 是否为图片视图 */
  isImageView: boolean
  /** 是否为视频视图 */
  isVideoView: boolean
  /** 是否为音频视图 */
  isAudioView: boolean
  /** 是否为 PDF 文件 */
  isPdfFile: boolean
  /** 是否为 HTML 文件 */
  isHtmlFile: boolean
  /** 是否为 Markdown 文件 */
  isMarkdownFile: boolean
  /** 是否为 Excel 文件 */
  isExcelFile: boolean
  /** 是否为 Word 文件 */
  isWordFile: boolean
  /** 是否为 CSV/TSV 文件 */
  isCsvFile: boolean
  /** Office 文件加载中 */
  officeLoading: boolean
  /** Office 文件加载错误 */
  officeError: string | null
  /** 是否可以保存 */
  canSaveFile: boolean
  /** 是否可以重置 */
  canResetContent: boolean
  /** 是否可以预览 */
  canPreviewFile: boolean
  /** 图片加载中 */
  imageLoading: boolean
  /** 当前图片尺寸 */
  currentImageDimensions: string
  /** 当前文件扩展名 */
  currentFileExtension: string
  /** 是否为二进制文件 */
  isBinaryFile: boolean
  /** 文件修改时间（用于检测外部变更） */
  fileMtime: string
  /** 多文件预览 Tab 列表 */
  previewTabs?: any[]
  /** 当前激活的 Tab ID */
  activeTabId?: string | null
}

/**
 * 右键菜单上下文类型
 */
export type ContextMenuContext = 'file-list' | 'editor' | 'empty'

/**
 * 右键菜单配置
 */
export interface ContextMenuConfig {
  /** 是否可见 */
  visible: boolean
  /** X 坐标 */
  x: number
  /** Y 坐标 */
  y: number
  /** 上下文类型 */
  context: ContextMenuContext
  /** 选中的文件（file-list 上下文） */
  selectedFile?: FileItem
}

/**
 * 文件操作结果
 */
export interface FileOperationResult {
  /** 是否成功 */
  success: boolean
  /** 错误信息 */
  error?: string
  /** 数据 */
  data?: any
}

/**
 * 路径导航历史
 */
export interface PathHistory {
  /** 历史记录数组 */
  paths: string[]
  /** 当前索引 */
  currentIndex: number
}

/**
 * 文件预览元数据
 */
export interface FilePreviewMetadata {
  /** 宽度 */
  width?: number
  /** 高度 */
  height?: number
  /** 时长（视频/音频） */
  duration?: number
  /** MIME 类型 */
  mimeType?: string
}

/**
 * 编辑器配置
 */
export interface EditorConfig {
  /** 是否可编辑 */
  editable: boolean
  /** 是否显示行号 */
  showLineNumbers: boolean
  /** 是否显示折叠按钮 */
  showFoldButtons: boolean
  /** 主题 */
  theme?: string
  /** 字体大小 */
  fontSize?: number
}

/**
 * 文件保存选项
 */
export interface FileSaveOptions {
  /** 是否创建备份 */
  createBackup?: boolean
  /** 是否保留原文件时间戳 */
  preserveTimestamp?: boolean
}

/**
 * ZIP 文件信息
 */
export interface ZipFileInfo {
  /** ZIP 文件路径 */
  zipPath: string
  /** ZIP 内部的当前路径 */
  currentPath: string
  /** ZIP 文件列表 */
  files: FileItem[]
}

/**
 * ZIP 面包屑项
 */
export interface ZipBreadcrumbItem {
  /** 目录名 */
  name: string
  /** 目录路径 */
  path: string
}
