// 权限动作类型
export type PermissionAction = 'allow' | 'deny' | 'ask';

// 单条权限规则
export interface PermissionRule {
  pattern: string;      // 匹配模式，如 "git push *", "rm *"
  action: PermissionAction;
}

// Bash 命令权限配置
export interface BashPermissionConfig {
  // 命令规则列表，按顺序匹配
  rules: PermissionRule[];
  // 外部目录访问策略
  externalDirectory: PermissionAction;
  // 默认策略（没有规则匹配时）
  default: PermissionAction;
}

// 权限请求上下文
export interface PermissionContext {
  command: string;
  workdir: string;
  patterns?: string[];   // 匹配到的模式
  externalPaths?: string[]; // 访问的外部路径
}

// 文件操作类型
export type FileOperation =
  | 'read'      // 读取文件
  | 'write'     // 写入文件
  | 'edit'      // 编辑文件
  | 'list'      // 列出目录
  | 'search'    // 搜索文件
  | 'grep'      // 搜索内容
  | 'info'      // 获取文件信息
  | 'move'      // 移动/重命名
  | 'copy'      // 复制
  | 'delete'    // 删除
  | 'mkdir';    // 创建目录

// 文件权限请求上下文
export interface FilePermissionContext {
  operation: FileOperation;
  path: string;           // 目标路径
  workdir: string;        // 当前工作目录
  // 用于 diff 显示的内容（仅 write/edit 操作）
  newContent?: string;    // 新内容
  oldContent?: string;    // 原内容（edit 操作时，要被替换的部分）
}

// 文件权限配置
export interface FilePermissionConfig {
  // 外部目录访问策略
  externalDirectory: PermissionAction;
  // 各操作的默认策略
  operations: {
    read: PermissionAction;
    write: PermissionAction;
    edit: PermissionAction;
    list: PermissionAction;
    search: PermissionAction;
    grep: PermissionAction;
    info: PermissionAction;
    move: PermissionAction;
    copy: PermissionAction;
    delete: PermissionAction;
    mkdir: PermissionAction;
  };
  // 敏感路径规则（优先于操作默认策略）
  sensitivePaths: {
    pattern: string;
    action: PermissionAction;
  }[];
}

// 权限检查结果
export interface PermissionCheckResult {
  allowed: boolean;
  action: PermissionAction;
  reason?: string;
  needsConfirmation?: boolean;
  patterns?: string[];
}

// 用户权限决定（用于 ask 时的回调）
export interface PermissionDecision {
  allow: boolean;
  remember?: boolean;  // 是否记住这个决定
}

// Web 搜索权限请求上下文
export interface WebPermissionContext {
  query: string;           // 搜索查询
  searchDepth?: 'basic' | 'advanced';  // 搜索深度
  topic?: 'general' | 'news' | 'finance';  // 搜索主题
  maxResults?: number;     // 最大结果数
}

// Web 权限配置
export interface WebPermissionConfig {
  // 默认策略
  default: PermissionAction;
  // 是否允许深度搜索
  allowAdvancedSearch: boolean;
  // 搜索主题限制（空数组表示允许所有）
  allowedTopics: ('general' | 'news' | 'finance')[];
}

// Git 操作类型
export type GitOperation =
  // 读操作
  | 'status'
  | 'diff'
  | 'log'
  | 'branch_list'
  | 'show'
  // 写操作
  | 'add'
  | 'commit'
  | 'push'
  | 'pull'
  | 'checkout'
  | 'branch_create'
  | 'branch_delete'
  | 'stash'
  | 'stash_pop'
  | 'reset'
  | 'merge'
  | 'rebase';

// Git 权限请求上下文
export interface GitPermissionContext {
  operation: GitOperation;
  target?: string;        // 分支名、文件路径等
  remote?: string;        // 远程仓库名
  force?: boolean;        // 是否强制操作
  message?: string;       // 提交信息等
}

// Git 权限配置
export interface GitPermissionConfig {
  // 读操作策略（默认 allow）
  readOperations: PermissionAction;
  // 写操作策略（默认 ask）
  writeOperations: PermissionAction;
  // 危险操作策略（force push, reset --hard 等，默认 ask）
  dangerousOperations: PermissionAction;
}
