export const nacosSchema = {
  id: 'nacos',
  name: 'Nacos',
  icon: 'Connection',
  category: '服务治理',
  description: '阿里巴巴开源的服务发现与配置管理平台',
  format: 'properties',
  fileName: 'application.properties',
  groups: [
    {
      title: '基础配置',
      fields: [
        {
          key: 'serverPort',
          label: '服务端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 8848,
        },
        {
          key: 'contextPath',
          label: '上下文路径',
          type: 'text',
          default: '/nacos',
        },
      ],
    },
    {
      title: '数据源配置',
      fields: [
        {
          key: 'dataSourceType',
          label: '数据源类型',
          type: 'select',
          options: [
            { label: 'Derby (内嵌，单机模式)', value: 'derby' },
            { label: 'MySQL (生产推荐)', value: 'mysql' },
          ],
          default: 'derby',
        },
        {
          key: 'dbUrl',
          label: '数据库连接地址',
          type: 'text',
          default: 'jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC',
          dependsOn: { key: 'dataSourceType', value: 'mysql' },
        },
        {
          key: 'dbUser',
          label: '数据库用户名',
          type: 'text',
          default: 'root',
          dependsOn: { key: 'dataSourceType', value: 'mysql' },
        },
        {
          key: 'dbPassword',
          label: '数据库密码',
          type: 'text',
          default: '',
          placeholder: '请输入数据库密码',
          dependsOn: { key: 'dataSourceType', value: 'mysql' },
        },
      ],
    },
    {
      title: '认证配置',
      fields: [
        {
          key: 'authEnable',
          label: '开启认证',
          type: 'switch',
          default: false,
          tip: '开启后需要 Token 访问 Nacos API',
        },
        {
          key: 'authPluginName',
          label: '认证插件',
          type: 'text',
          default: 'com.alibaba.nacos.core.auth.NacosAuthPlugin',
          dependsOn: { key: 'authEnable', value: true },
        },
        {
          key: 'tokenSecretKey',
          label: 'Token 密钥',
          type: 'text',
          default: '',
          placeholder: '请输入自定义密钥（至少32字符）',
          dependsOn: { key: 'authEnable', value: true },
          tip: '生产环境务必设置自定义密钥',
        },
        {
          key: 'tokenExpireSeconds',
          label: 'Token 过期时间 (秒)',
          type: 'number',
          min: 60,
          max: 86400,
          default: 18000,
          dependsOn: { key: 'authEnable', value: true },
        },
      ],
    },
    {
      title: '服务注册与发现',
      fields: [
        {
          key: 'namingPushTimeout',
          label: '推送超时时间 (毫秒)',
          type: 'number',
          min: 1000,
          max: 60000,
          step: 1000,
          default: 10000,
          tip: '服务变更推送到客户端的超时时间',
        },
        {
          key: 'namingHeartbeatInterval',
          label: '心跳间隔 (毫秒)',
          type: 'number',
          min: 1000,
          max: 30000,
          step: 1000,
          default: 5000,
          tip: '客户端向 Nacos 发送心跳的间隔',
        },
      ],
    },
    {
      title: '集群配置',
      fields: [
        {
          key: 'clusterMode',
          label: '集群模式',
          type: 'switch',
          default: false,
          tip: '多节点部署时开启',
        },
        {
          key: 'clusterNodes',
          label: '集群节点列表',
          type: 'text',
          default: '127.0.0.1:8848',
          placeholder: 'ip1:port1,ip2:port2,ip3:port3',
          dependsOn: { key: 'clusterMode', value: true },
          tip: '多个节点用逗号分隔',
        },
      ],
    },
    {
      title: '日志配置',
      fields: [
        {
          key: 'logLevel',
          label: '日志级别',
          type: 'select',
          options: [
            { label: 'INFO (默认)', value: 'INFO' },
            { label: 'WARN', value: 'WARN' },
            { label: 'DEBUG', value: 'DEBUG' },
          ],
          default: 'INFO',
        },
      ],
    },
  ],
}

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

  // 基础配置
  lines.push(`# ======================== 基础配置 ========================`)
  lines.push(`server.port=${config.serverPort}`)
  lines.push(`server.servlet.context-path=${config.contextPath}`)
  lines.push(`server.tomcat.accesslog.enabled=true`)
  lines.push(`server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D`)
  lines.push(``)

  // 数据源配置
  lines.push(`# ======================== 数据源配置 ========================`)
  lines.push(`spring.datasource.platform=${config.dataSourceType}`)
  if (config.dataSourceType === 'derby') {
    lines.push(`db.num=1`)
    lines.push(`db.url.0=jdbc:derby://localhost:1527/nacos;create=true`)
    lines.push(`db.user.0=nacos`)
    lines.push(`db.password.0=nacos`)
  } else {
    lines.push(`db.num=1`)
    lines.push(`db.url.0=${config.dbUrl}`)
    lines.push(`db.user.0=${config.dbUser}`)
    lines.push(`db.password.0=${config.dbPassword || ''}`)
  }
  lines.push(``)

  // 认证配置
  lines.push(`# ======================== 认证配置 ========================`)
  lines.push(`nacos.core.auth.enabled=${config.authEnable}`)
  if (config.authEnable) {
    lines.push(`nacos.core.auth.plugin.type=${config.authPluginName}`)
    if (config.tokenSecretKey) {
      lines.push(`nacos.core.auth.default.token.secret.key=${config.tokenSecretKey}`)
    }
    lines.push(`nacos.core.auth.default.token.expire.seconds=${config.tokenExpireSeconds}`)
    lines.push(`nacos.core.auth.server.identity.key=nacos`)
    lines.push(`nacos.core.auth.server.identity.value=nacos`)
  }
  lines.push(``)

  // 服务注册与发现
  lines.push(`# ======================== 服务注册与发现 ========================`)
  lines.push(`naming.push.timeout=${config.namingPushTimeout}`)
  lines.push(`naming.heartbeat.interval=${config.namingHeartbeatInterval}`)
  lines.push(`naming.clean.expired.instance.interval=5000`)
  lines.push(``)

  // 集群配置
  lines.push(`# ======================== 集群配置 ========================`)
  if (config.clusterMode) {
    lines.push(`# 集群模式`)
    const nodes = config.clusterNodes.split(',').map((n) => n.trim())
    lines.push(`nacos.cluster.member.list=${nodes.join(',')}`)
    lines.push(`nacos.core.protocol.raft.grpc.server.enabled=true`)
  } else {
    lines.push(`# 单机模式`)
    lines.push(`# nacos.cluster.member.list=ip1:port1,ip2:port2,ip3:port3`)
  }
  lines.push(``)

  // 日志配置
  lines.push(`# ======================== 日志配置 ========================`)
  lines.push(`logging.level.root=${config.logLevel}`)
  lines.push(`logging.level.com.alibaba.nacos=${config.logLevel}`)
  lines.push(`logging.file.name=logs/nacos.log`)
  lines.push(`logging.logback.rollingpolicy.max-file-size=10MB`)
  lines.push(`logging.logback.rollingpolicy.max-history=30`)

  return lines.join('\n')
}
