export const zabbixSchema = {
  id: 'zabbix',
  name: 'Zabbix',
  icon: 'Monitor',
  category: '日志监控',
  description: '企业级开源监控解决方案',
  format: 'conf',
  fileName: 'zabbix_server.conf',
  groups: [
    {
      title: '基础配置',
      fields: [
        {
          key: 'listenPort',
          label: '监听端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 10051,
        },
        {
          key: 'logType',
          label: '日志输出方式',
          type: 'select',
          options: [
            { label: 'file - 输出到文件', value: 'file' },
            { label: 'console - 控制台输出', value: 'console' },
            { label: 'system - 系统日志', value: 'system' },
          ],
          default: 'file',
        },
        {
          key: 'logFileSize',
          label: '日志文件大小 (MB)',
          type: 'number',
          min: 1,
          max: 1024,
          default: 10,
          tip: '日志轮转大小',
        },
      ],
    },
    {
      title: '数据库配置',
      fields: [
        {
          key: 'dbHost',
          label: '数据库主机',
          type: 'text',
          default: 'localhost',
        },
        {
          key: 'dbName',
          label: '数据库名称',
          type: 'text',
          default: 'zabbix',
        },
        {
          key: 'dbUser',
          label: '数据库用户',
          type: 'text',
          default: 'zabbix',
        },
        {
          key: 'dbPassword',
          label: '数据库密码',
          type: 'text',
          default: 'zabbix',
        },
        {
          key: 'dbSocket',
          label: '数据库 Socket',
          type: 'text',
          default: '/var/run/mysqld/mysqld.sock',
          tip: '本地连接优先使用 Socket',
        },
      ],
    },
    {
      title: '缓存配置',
      fields: [
        {
          key: 'cacheSize',
          label: '配置缓存',
          type: 'text',
          default: '128M',
          tip: '存储主机、监控项等配置数据',
        },
        {
          key: 'historyCacheSize',
          label: '历史数据缓存',
          type: 'text',
          default: '64M',
        },
        {
          key: 'trendCacheSize',
          label: '趋势数据缓存',
          type: 'text',
          default: '32M',
        },
        {
          key: 'valueCacheSize',
          label: '值缓存',
          type: 'text',
          default: '32M',
          tip: '缓存最近历史值，减少数据库查询',
        },
      ],
    },
    {
      title: '进程配置',
      fields: [
        {
          key: 'startPollers',
          label: 'Poller 进程数',
          type: 'number',
          min: 1,
          max: 100,
          default: 5,
          tip: '常规数据采集进程',
        },
        {
          key: 'startPingers',
          label: 'Pinger 进程数',
          type: 'number',
          min: 1,
          max: 100,
          default: 1,
          tip: 'ICMP ping 检测进程',
        },
        {
          key: 'enableTrapper',
          label: '启用 Trapper',
          type: 'switch',
          default: true,
          tip: '接收主动发送的数据',
        },
        {
          key: 'trapperTimeout',
          label: 'Trapper 超时 (秒)',
          type: 'number',
          min: 1,
          max: 300,
          default: 300,
          dependsOn: { key: 'enableTrapper', value: true },
        },
        {
          key: 'slowQueryThreshold',
          label: '慢查询阈值 (秒)',
          type: 'number',
          min: 0,
          max: 60,
          default: 0,
          tip: '0=关闭，记录超过此时间的数据库查询',
        },
      ],
    },
    {
      title: '脚本与路径',
      fields: [
        {
          key: 'alertScriptsPath',
          label: '告警脚本路径',
          type: 'text',
          default: '/usr/lib/zabbix/alertscripts',
        },
        {
          key: 'externalScripts',
          label: '外部脚本路径',
          type: 'text',
          default: '/usr/lib/zabbix/externalscripts',
        },
      ],
    },
    {
      title: '维护配置',
      fields: [
        {
          key: 'housekeepingFrequency',
          label: '数据清理间隔 (小时)',
          type: 'number',
          min: 1,
          max: 24,
          default: 1,
          tip: '过期历史数据清理频率',
        },
      ],
    },
  ],
}

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

  // 基础
  lines.push(`# ======================== 基础配置 ========================`)
  lines.push(`ListenPort=${config.listenPort}`)
  lines.push(`LogType=${config.logType}`)
  lines.push(`LogFileSize=${config.logFileSize}`)
  lines.push(``)

  // 数据库
  lines.push(`# ======================== 数据库配置 ========================`)
  lines.push(`DBHost=${config.dbHost}`)
  lines.push(`DBName=${config.dbName}`)
  lines.push(`DBUser=${config.dbUser}`)
  lines.push(`DBPassword=${config.dbPassword}`)
  lines.push(`DBSocket=${config.dbSocket}`)
  lines.push(``)

  // 缓存
  lines.push(`# ======================== 缓存配置 ========================`)
  lines.push(`CacheSize=${config.cacheSize}`)
  lines.push(`HistoryCacheSize=${config.historyCacheSize}`)
  lines.push(`TrendCacheSize=${config.trendCacheSize}`)
  lines.push(`ValueCacheSize=${config.valueCacheSize}`)
  lines.push(``)

  // 进程
  lines.push(`# ======================== 进程配置 ========================`)
  lines.push(`StartPollers=${config.startPollers}`)
  lines.push(`StartPingers=${config.startPingers}`)
  if (config.enableTrapper) {
    lines.push(`StartTrappers=5`)
    lines.push(`TrapperTimeout=${config.trapperTimeout}`)
  } else {
    lines.push(`StartTrappers=0`)
  }
  if (config.slowQueryThreshold > 0) {
    lines.push(`SlowQueryThreshold=${config.slowQueryThreshold}`)
  }
  lines.push(``)

  // 脚本
  lines.push(`# ======================== 脚本与路径 ========================`)
  lines.push(`AlertScriptsPath=${config.alertScriptsPath}`)
  lines.push(`ExternalScripts=${config.externalScripts}`)
  lines.push(``)

  // 维护
  lines.push(`# ======================== 维护配置 ========================`)
  lines.push(`HousekeepingFrequency=${config.housekeepingFrequency}`)

  return lines.join('\n')
}
