export const mycatSchema = {
  id: 'mycat',
  name: 'Mycat',
  icon: 'Coin',
  category: '数据库中间件',
  description: '开源数据库中间件，支持 MySQL 协议',
  format: 'xml',
  fileName: 'server.xml',
  groups: [
    {
      title: '网络配置',
      fields: [
        {
          key: 'port',
          label: '服务端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 8066,
          tip: 'MyCat 数据服务端口',
        },
        {
          key: 'managerPort',
          label: '管理端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 9066,
          tip: 'MyCat 管理服务端口',
        },
        {
          key: 'processors',
          label: '处理线程数',
          type: 'number',
          min: 1,
          max: 64,
          default: 8,
          tip: '建议设为 CPU 核心数',
        },
        {
          key: 'maxConnections',
          label: '最大连接数',
          type: 'number',
          min: 1,
          max: 10000,
          default: 1000,
        },
        {
          key: 'idleTimeout',
          label: '空闲超时 (毫秒)',
          type: 'number',
          min: 0,
          max: 3600000,
          step: 1000,
          default: 1800000,
          tip: '连接空闲超时时间，默认 30 分钟',
        },
      ],
    },
    {
      title: '数据库配置',
      fields: [
        {
          key: 'defaultSchema',
          label: '默认 Schema',
          type: 'text',
          default: 'mydb',
          tip: '客户端连接后默认使用的逻辑库',
        },
        {
          key: 'charset',
          label: '字符集',
          type: 'select',
          options: [
            { label: 'utf8mb4 (推荐)', value: 'utf8mb4' },
            { label: 'utf8', value: 'utf8' },
          ],
          default: 'utf8mb4',
        },
        {
          key: 'txIsolation',
          label: '事务隔离级别',
          type: 'select',
          options: [
            { label: '1 - READ_UNCOMMITTED', value: '1' },
            { label: '2 - READ_COMMITTED (推荐)', value: '2' },
            { label: '3 - REPEATABLE_READ', value: '3' },
            { label: '4 - SERIALIZABLE', value: '4' },
          ],
          default: '2',
          tip: '1=READ_UNCOMMITTED 2=READ_COMMITTED 3=REPEATABLE_READ 4=SERIALIZABLE',
        },
        {
          key: 'sqlExecuteLimit',
          label: 'SQL 执行限制',
          type: 'number',
          min: 0,
          max: 10000,
          default: 100,
          tip: '单次查询最大执行行数，0 表示不限制',
        },
      ],
    },
    {
      title: '性能与优化',
      fields: [
        {
          key: 'enableGather',
          label: '统计 SQL 执行',
          type: 'switch',
          default: true,
          tip: '统计 SQL 执行次数和时间',
        },
        {
          key: 'useCompression',
          label: '启用压缩',
          type: 'switch',
          default: false,
          tip: 'MySQL 协议压缩，减少网络传输',
        },
      ],
    },
    {
      title: '用户认证',
      fields: [
        {
          key: 'authUser',
          label: '用户名',
          type: 'text',
          default: 'root',
          tip: '连接 MyCat 的用户名',
        },
        {
          key: 'authPassword',
          label: '密码',
          type: 'text',
          default: '123456',
          tip: '连接 MyCat 的密码',
        },
        {
          key: 'readOnly',
          label: '只读用户',
          type: 'switch',
          default: false,
          tip: '该用户是否只有读权限',
        },
      ],
    },
  ],
}

export function generateMycatServerXml(config) {
  const lines = []
  lines.push(`<?xml version="1.0" encoding="UTF-8"?>`)
  lines.push(`<!-- MyCat server.xml 配置文件 - 由 ConfTemplate 生成 -->`)
  lines.push(`<!-- 生成时间: ${new Date().toLocaleString('zh-CN')} -->`)
  lines.push(`<!DOCTYPE mycat:server SYSTEM "server.dtd">`)
  lines.push(`<mycat:server xmlns:mycat="http://io.mycat/">`)
  lines.push(``)

  // 系统配置
  lines.push(`  <system>`)
  lines.push(`    <property name="serverPort">${config.port}</property>`)
  lines.push(`    <property name="managerPort">${config.managerPort}</property>`)
  lines.push(`    <property name="processors">${config.processors}</property>`)
  lines.push(`    <property name="maxConnections">${config.maxConnections}</property>`)
  lines.push(`    <property name="idleTimeout">${config.idleTimeout}</property>`)
  lines.push(`    <property name="defaultSchema">${config.defaultSchema}</property>`)
  lines.push(`    <property name="characterEncoding">${config.charset}</property>`)
  lines.push(`    <property name="txIsolation">${config.txIsolation}</property>`)
  lines.push(`    <property name="sqlExecuteTimeout">${config.sqlExecuteLimit}</property>`)

  if (config.enableGather) {
    lines.push(`    <property name="useSqlStat">1</property>`)
  }

  if (config.useCompression) {
    lines.push(`    <property name="handleDistributedTransactions">0</property>`)
    lines.push(`    <property name="useGlobleTableCheck">0</property>`)
    lines.push(`    <!-- 压缩配置 -->`)
    lines.push(`    <property name="packetHeaderSize">4</property>`)
    lines.push(`    <property name="maxPacketSize">16777216</property>`)
  }

  lines.push(`  </system>`)
  lines.push(``)

  // 用户配置
  lines.push(`  <!-- 用户配置 -->`)
  lines.push(`  <user name="${config.authUser}">`)
  lines.push(`    <property name="password">${config.authPassword}</property>`)
  lines.push(`    <property name="schemas">${config.defaultSchema}</property>`)

  if (config.readOnly) {
    lines.push(`    <property name="readOnly">true</property>`)
  }

  lines.push(`  </user>`)
  lines.push(``)

  // 集群配置注释
  lines.push(`  <!--`)
  lines.push(`  集群配置示例 (在其他节点配置):`)
  lines.push(`  <cluster>`)
  lines.push(`    <node name="node1" ip="192.168.1.101" port="3306"/>`)
  lines.push(`    <node name="node2" ip="192.168.1.102" port="3306"/>`)
  lines.push(`  </cluster>`)
  lines.push(`  -->`)

  lines.push(``)

  // 连接池注释
  lines.push(`  <!-- 连接池配置示例 (在 schema.xml 中配置): -->`)
  lines.push(`  <!--`)
  lines.push(`  <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"`)
  lines.push(`            writeType="0" dbType="mysql" dbDriver="native">`)
  lines.push(`    <heartbeat>select user()</heartbeat>`)
  lines.push(`    <writeHost host="hostM1" url="192.168.1.101:3306"`)
  lines.push(`               user="root" password="123456"/>`)
  lines.push(`  </dataHost>`)
  lines.push(`  -->`)

  lines.push(`</mycat:server>`)

  return lines.join('\n')
}
