export const zookeeperSchema = {
  id: 'zookeeper',
  name: 'ZooKeeper',
  icon: 'Connection',
  category: '分布式协调',
  description: 'Apache 分布式协调服务',
  format: 'cfg',
  fileName: 'zoo.cfg',
  groups: [
    {
      title: '基础配置',
      fields: [
        {
          key: 'tickTime',
          label: '心跳间隔 (毫秒)',
          type: 'number',
          min: 100,
          max: 60000,
          step: 100,
          default: 2000,
          tip: 'ZooKeeper 服务器之间或客户端与服务器之间的基本时间单元',
        },
        {
          key: 'initLimit',
          label: '初始化同步限制',
          type: 'number',
          min: 1,
          max: 100,
          default: 10,
          tip: 'Follower 连接并同步到 Leader 的最大 tick 数',
        },
        {
          key: 'syncLimit',
          label: '同步限制',
          type: 'number',
          min: 1,
          max: 100,
          default: 5,
          tip: 'Follower 与 Leader 之间的最大 tick 数',
        },
        {
          key: 'dataDir',
          label: '数据目录',
          type: 'text',
          default: '/var/lib/zookeeper',
        },
        {
          key: 'dataLogDir',
          label: '事务日志目录',
          type: 'text',
          default: '/var/lib/zookeeper/log',
          tip: '建议使用独立磁盘提升性能',
        },
        {
          key: 'clientPort',
          label: '客户端端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 2181,
        },
        {
          key: 'maxClientCnxns',
          label: '最大客户端连接数',
          type: 'number',
          min: 1,
          max: 10000,
          default: 60,
          tip: '单个 IP 最大连接数，0 表示不限制',
        },
      ],
    },
    {
      title: '高级配置',
      fields: [
        {
          key: 'enable4lw',
          label: '开启四字命令',
          type: 'switch',
          default: true,
          tip: '允许 ruok、stat、mntr 等四字命令（运维监控用）',
        },
        {
          key: 'autopurgeSnapRetainCount',
          label: '保留快照数量',
          type: 'number',
          min: 1,
          max: 100,
          default: 3,
          tip: '自动清理时保留的快照文件数',
        },
        {
          key: 'autopurgePurgeInterval',
          label: '自动清理间隔 (小时)',
          type: 'number',
          min: 0,
          max: 168,
          default: 0,
          tip: '0 表示禁用自动清理',
        },
        {
          key: 'adminEnableServer',
          label: '开启管理服务',
          type: 'switch',
          default: true,
          tip: 'AdminServer 提供 HTTP API 用于管理',
        },
        {
          key: 'adminServerPort',
          label: '管理服务端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 8080,
          dependsOn: { key: 'adminEnableServer', value: true },
        },
      ],
    },
    {
      title: '集群配置',
      fields: [
        {
          key: 'enableCluster',
          label: '集群模式',
          type: 'switch',
          default: false,
          tip: '多节点部署时开启',
        },
        {
          key: 'clusterServers',
          label: '集群节点列表',
          type: 'text',
          default: 'server.1=zk1:2888:3888\nserver.2=zk2:2888:3888\nserver.3=zk3:2888:3888',
          placeholder: 'server.1=ip1:2888:3888\nserver.2=ip2:2888:3888',
          dependsOn: { key: 'enableCluster', value: true },
          tip: '每行一个，格式：server.N=host:port:port',
        },
      ],
    },
    {
      title: 'JVM 配置',
      fields: [
        {
          key: 'jvmHeap',
          label: 'JVM 堆内存',
          type: 'select',
          options: [
            { label: '512M', value: '512M' },
            { label: '1G (默认)', value: '1G' },
            { label: '2G', value: '2G' },
            { label: '4G', value: '4G' },
          ],
          default: '1G',
          tip: '通过 JVMFLAGS 环境变量设置',
        },
      ],
    },
  ],
}

export function generateZookeeperCfg(config) {
  const lines = []
  lines.push(`# ZooKeeper 配置文件 - 由 ConfTemplate 生成`)
  lines.push(`# 生成时间: ${new Date().toLocaleString('zh-CN')}`)
  lines.push(``)

  // 基础配置
  lines.push(`# ======================== 基础配置 ========================`)
  lines.push(`tickTime=${config.tickTime}`)
  lines.push(`initLimit=${config.initLimit}`)
  lines.push(`syncLimit=${config.syncLimit}`)
  lines.push(`dataDir=${config.dataDir}`)
  lines.push(`dataLogDir=${config.dataLogDir}`)
  lines.push(`clientPort=${config.clientPort}`)
  lines.push(`maxClientCnxns=${config.maxClientCnxns}`)
  lines.push(``)

  // 高级配置
  lines.push(`# ======================== 高级配置 ========================`)
  if (config.enable4lw) {
    lines.push(`4lw.commands.whitelist=*`)
  } else {
    lines.push(`# 4lw.commands.whitelist=*`)
  }
  lines.push(`autopurge.snapRetainCount=${config.autopurgeSnapRetainCount}`)
  lines.push(`autopurge.purgeInterval=${config.autopurgePurgeInterval}`)
  lines.push(``)

  if (config.adminEnableServer) {
    lines.push(`# 管理服务`)
    lines.push(`admin.enableServer=true`)
    lines.push(`admin.serverPort=${config.adminServerPort}`)
  } else {
    lines.push(`admin.enableServer=false`)
  }
  lines.push(``)

  // 集群配置
  if (config.enableCluster) {
    lines.push(`# ======================== 集群配置 ========================`)
    const servers = config.clusterServers.split('\n').map((s) => s.trim()).filter(Boolean)
    for (const server of servers) {
      lines.push(server)
    }
    lines.push(``)
  }

  // JVM 配置注释
  lines.push(`# ======================== JVM 配置 ========================`)
  lines.push(`# 在 zkEnv.sh 或启动脚本中设置:`)
  lines.push(`# export JVMFLAGS="-Xms${config.jvmHeap} -Xmx${config.jvmHeap} -XX:+UseG1GC -XX:MaxGCPauseMillis=200"`)
  lines.push(`#`)

  return lines.join('\n')
}
