export const subversionSchema = {
  id: 'subversion',
  name: 'Subversion (SVN)',
  icon: 'Files',
  category: '系统服务',
  description: '集中式版本控制系统',
  format: 'conf',
  fileName: 'svnserve.conf',
  groups: [
    {
      title: '访问控制',
      fields: [
        {
          key: 'anonAccess',
          label: '匿名访问权限',
          type: 'select',
          options: [
            { label: 'none - 禁止匿名访问 (推荐)', value: 'none' },
            { label: 'read - 匿名用户只读', value: 'read' },
            { label: 'write - 匿名用户可写', value: 'write' },
          ],
          default: 'none',
        },
        {
          key: 'authAccess',
          label: '认证用户权限',
          type: 'select',
          options: [
            { label: 'write - 认证用户可写 (推荐)', value: 'write' },
            { label: 'read - 认证用户只读', value: 'read' },
          ],
          default: 'write',
        },
        {
          key: 'passwordDb',
          label: '密码数据库文件',
          type: 'text',
          default: 'passwd',
          tip: '相对于 conf 目录的路径',
        },
        {
          key: 'authzDb',
          label: '权限数据库文件',
          type: 'text',
          default: 'authz',
          tip: '相对于 conf 目录的路径',
        },
        {
          key: 'realm',
          label: '认证域',
          type: 'text',
          default: 'My Repository',
          tip: '认证域名称，用于区分不同的仓库',
        },
        {
          key: 'listenPort',
          label: '监听端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 3690,
        },
      ],
    },
    {
      title: 'SASL 认证',
      fields: [
        {
          key: 'enableSasl',
          label: '启用 SASL 认证',
          type: 'switch',
          default: false,
          tip: '使用 SASL 框架进行认证，支持更高级的加密',
        },
        {
          key: 'saslRealm',
          label: 'SASL 域',
          type: 'text',
          default: '',
          dependsOn: { key: 'enableSasl', value: true },
          tip: 'SASL 认证域，留空使用默认',
        },
        {
          key: 'minEncryption',
          label: '最小加密强度',
          type: 'number',
          min: 0,
          max: 256,
          default: 0,
          dependsOn: { key: 'enableSasl', value: true },
          tip: '0=不加密, 1=仅完整性, 128=128位, 256=256位',
        },
        {
          key: 'maxEncryption',
          label: '最大加密强度',
          type: 'number',
          min: 0,
          max: 256,
          default: 256,
          dependsOn: { key: 'enableSasl', value: true },
          tip: '0=不加密, 1=仅完整性, 128=128位, 256=256位',
        },
      ],
    },
    {
      title: '钩子脚本',
      fields: [
        {
          key: 'enableHooks',
          label: '启用钩子脚本',
          type: 'switch',
          default: false,
          tip: '在特定 SVN 事件时执行自定义脚本',
        },
        {
          key: 'hookType',
          label: '钩子类型',
          type: 'select',
          options: [
            { label: 'post-commit - 提交后执行 (推荐)', value: 'post-commit' },
            { label: 'pre-commit - 提交前执行', value: 'pre-commit' },
          ],
          default: 'post-commit',
          dependsOn: { key: 'enableHooks', value: true },
        },
        {
          key: 'hookScript',
          label: '钩子脚本内容',
          type: 'text',
          default: '#!/bin/sh\n/usr/bin/svn update /var/www/html',
          dependsOn: { key: 'enableHooks', value: true },
          tip: '钩子脚本的完整内容',
        },
      ],
    },
  ],
}

export function generateSubversionConf(config) {
  const lines = []
  lines.push(`# svnserve.conf 配置文件 - 由 ConfTemplate 生成`)
  lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
  lines.push(`#`)
  lines.push(`# 将此文件放置在仓库的 conf/ 目录下`)
  lines.push(`# 启动命令: svnserve -d -r /path/to/repos --listen-port ${config.listenPort}`)
  lines.push(``)

  // 通用配置
  lines.push(`[general]`)

  // 匿名访问
  lines.push(`# 匿名访问权限`)
  lines.push(`anon-access = ${config.anonAccess}`)
  lines.push(``)

  // 认证用户访问
  lines.push(`# 认证用户访问权限`)
  lines.push(`auth-access = ${config.authAccess}`)
  lines.push(``)

  // 密码数据库
  lines.push(`# 密码数据库`)
  lines.push(`password-db = ${config.passwordDb}`)
  lines.push(``)

  // 权限数据库
  lines.push(`# 权限数据库`)
  lines.push(`authz-db = ${config.authzDb}`)
  lines.push(``)

  // 认证域
  lines.push(`# 认证域`)
  lines.push(`realm = ${config.realm}`)
  lines.push(``)

  // SASL 认证
  if (config.enableSasl) {
    lines.push(`[sasl]`)
    lines.push(`# 启用 SASL 认证`)
    lines.push(`use-sasl = true`)

    if (config.saslRealm) {
      lines.push(`sasl-realm = ${config.saslRealm}`)
    }

    lines.push(`min-encryption = ${config.minEncryption}`)
    lines.push(`max-encryption = ${config.maxEncryption}`)
    lines.push(``)
  }

  // 钩子脚本说明
  if (config.enableHooks) {
    lines.push(`# ======================== 钩子脚本 ========================`)
    lines.push(`# 以下为 ${config.hookType} 钩子脚本`)
    lines.push(`# 请将此内容保存为: <仓库路径>/hooks/${config.hookType}`)
    lines.push(`# 并确保有执行权限: chmod +x <仓库路径>/hooks/${config.hookType}`)
    lines.push(`#`)
    lines.push(`# ---- 脚本内容开始 ----`)
    lines.push(config.hookScript)
    lines.push(`# ---- 脚本内容结束 ----`)
    lines.push(`#`)
  }

  // passwd 文件示例
  lines.push(`# ======================== 附录 ========================`)
  lines.push(`# passwd 文件示例 (${config.passwordDb}):`)
  lines.push(`# [users]`)
  lines.push(`# admin = admin123`)
  lines.push(`# developer = dev123`)
  lines.push(`#`)
  lines.push(`# authz 文件示例 (${config.authzDb}):`)
  lines.push(`# [groups]`)
  lines.push(`# admin = admin`)
  lines.push(`# developers = developer`)
  lines.push(`#`)
  lines.push(`# [/]`)
  lines.push(`# @admin = rw`)
  lines.push(`# * = ${config.anonAccess === 'none' ? '' : config.anonAccess}`)
  lines.push(`#`)
  lines.push(`# [/trunk]`)
  lines.push(`# @developers = rw`)

  return lines.join('\n')
}
