import { settingsDb } from '../database/db.js';

/**
 * 全量功能权限 key 及硬编码默认值
 */
export const ALL_FEATURE_PERMISSIONS = {
  claude_shell: true,       // Claude Code Shell 访问权限
  codex_shell: true,        // Codex Shell 访问权限
  gemini_shell: true,       // Gemini CLI Shell 访问权限
  submit_agent: true,       // 设置 > Agents > 提交 Agent
  tab_models: true,         // 设置 > Agent > 模型 tab
  tab_skills: true,         // 设置 > Agent > 技能 tab
  tab_mcp: true,            // 设置 > Agent > MCP 服务器 tab
  tab_permissions: true,    // 设置 > Agent > 权限设置 tab
  feishu_binding: true,     // 设置 > 账户 > 绑定飞书账号
  create_project: true,     // 侧边栏 > 新建项目
};

/**
 * 权限中文标签
 */
export const PERMISSION_LABELS = {
  claude_shell: 'Claude Code Shell',
  codex_shell: 'Codex Shell',
  gemini_shell: 'Gemini CLI Shell',
  submit_agent: '提交 Agent',
  tab_models: '模型设置',
  tab_skills: '技能设置',
  tab_mcp: 'MCP 服务器设置',
  tab_permissions: '权限设置',
  feishu_binding: '绑定飞书账号',
  create_project: '新建项目',
};

/**
 * 安全解析 JSON 字符串为权限对象，解析失败返回 null
 */
function parsePermissionsJson(jsonStr) {
  if (!jsonStr) return null;
  try {
    const parsed = JSON.parse(jsonStr);
    if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
      return parsed;
    }
  } catch (_) {
    // ignore
  }
  return null;
}

/**
 * 获取系统默认权限（admin UI 配置 → 环境变量 → 硬编码全 true）
 */
export function getDefaultPermissions() {
  // 1. 先查 system_settings 表
  const dbValue = settingsDb.get('default_feature_permissions');
  const fromDb = parsePermissionsJson(dbValue);
  if (fromDb) {
    return { ...ALL_FEATURE_PERMISSIONS, ...fromDb };
  }

  // 2. 再查环境变量
  const envValue = process.env.DEFAULT_FEATURE_PERMISSIONS;
  const fromEnv = parsePermissionsJson(envValue);
  if (fromEnv) {
    return { ...ALL_FEATURE_PERMISSIONS, ...fromEnv };
  }

  // 3. 硬编码全 true
  return { ...ALL_FEATURE_PERMISSIONS };
}

/**
 * 解析用户最终权限
 * @param {object} user - 用户对象，需包含 role 和 feature_permissions 字段
 * @returns {object} 解析后的权限对象
 */
export function resolvePermissions(user) {
  // admin / super_admin 始终全部权限
  if (user.role === 'super_admin' || user.role === 'admin') {
    return { ...ALL_FEATURE_PERMISSIONS };
  }

  // 用户个性化权限优先
  const userPerms = parsePermissionsJson(user.feature_permissions);
  if (userPerms) {
    return { ...ALL_FEATURE_PERMISSIONS, ...userPerms };
  }

  // 回退到系统默认
  return getDefaultPermissions();
}
