export const vsftpdSchema = {
  id: 'vsftpd',
  name: 'vsftpd',
  icon: 'Upload',
  category: '系统服务',
  description: '非常安全的 FTP 守护进程',
  format: 'conf',
  fileName: 'vsftpd.conf',
  groups: [
    {
      title: '基础配置',
      fields: [
        {
          key: 'listenPort',
          label: '监听端口',
          type: 'number',
          min: 1,
          max: 65535,
          default: 21,
        },
        {
          key: 'anonymousEnable',
          label: '允许匿名访问',
          type: 'switch',
          default: false,
          tip: '生产环境建议关闭',
        },
        {
          key: 'localEnable',
          label: '允许本地用户登录',
          type: 'switch',
          default: true,
        },
        {
          key: 'writeEnable',
          label: '允许写操作',
          type: 'switch',
          default: true,
          tip: 'FTP 写命令权限 (STOR, DELE 等)',
        },
        {
          key: 'localUmask',
          label: '本地用户 umask',
          type: 'text',
          default: '022',
          tip: '新建文件/目录的权限掩码',
        },
      ],
    },
    {
      title: '用户限制',
      fields: [
        {
          key: 'chrootLocalUser',
          label: '限制用户在家目录',
          type: 'switch',
          default: true,
          tip: 'chroot 将用户限制在其主目录',
        },
        {
          key: 'allowWriteableChroot',
          label: '允许可写 chroot',
          type: 'switch',
          default: true,
          dependsOn: { key: 'chrootLocalUser', value: true },
          tip: 'chroot 目录可写时需要开启',
        },
        {
          key: 'maxClients',
          label: '最大客户端数',
          type: 'number',
          min: 1,
          max: 10000,
          default: 100,
        },
        {
          key: 'maxPerIp',
          label: '单 IP 最大连接数',
          type: 'number',
          min: 1,
          max: 100,
          default: 5,
        },
        {
          key: 'idleSessionTimeout',
          label: '空闲会话超时 (秒)',
          type: 'number',
          min: 30,
          max: 3600,
          default: 300,
        },
        {
          key: 'dataConnectionTimeout',
          label: '数据连接超时 (秒)',
          type: 'number',
          min: 30,
          max: 3600,
          default: 120,
        },
      ],
    },
    {
      title: '被动模式',
      fields: [
        {
          key: 'pasvEnable',
          label: '启用被动模式',
          type: 'switch',
          default: true,
          tip: '防火墙/NAT 后的客户端需要被动模式',
        },
        {
          key: 'pasvMinPort',
          label: '被动模式最小端口',
          type: 'number',
          min: 1024,
          max: 65535,
          default: 30000,
          dependsOn: { key: 'pasvEnable', value: true },
        },
        {
          key: 'pasvMaxPort',
          label: '被动模式最大端口',
          type: 'number',
          min: 1024,
          max: 65535,
          default: 30100,
          dependsOn: { key: 'pasvEnable', value: true },
        },
      ],
    },
    {
      title: 'TLS/SSL 安全',
      fields: [
        {
          key: 'enableTls',
          label: '启用 TLS/SSL',
          type: 'switch',
          default: false,
          tip: '通过 FTPS 加密传输',
        },
        {
          key: 'rsaCertFile',
          label: 'SSL 证书路径',
          type: 'text',
          default: '/etc/ssl/certs/vsftpd.pem',
          dependsOn: { key: 'enableTls', value: true },
        },
        {
          key: 'rsaPrivateKeyFile',
          label: 'SSL 私钥路径',
          type: 'text',
          default: '/etc/ssl/private/vsftpd.key',
          dependsOn: { key: 'enableTls', value: true },
        },
        {
          key: 'sslTlsv1',
          label: '启用 TLSv1',
          type: 'switch',
          default: true,
          dependsOn: { key: 'enableTls', value: true },
        },
      ],
    },
    {
      title: '用户列表与日志',
      fields: [
        {
          key: 'userlistEnable',
          label: '启用用户列表',
          type: 'switch',
          default: true,
        },
        {
          key: 'userlistDeny',
          label: '用户列表为黑名单',
          type: 'switch',
          default: false,
          dependsOn: { key: 'userlistEnable', value: true },
          tip: 'false=白名单 (允许列表中用户), true=黑名单 (拒绝列表中用户)',
        },
        {
          key: 'logEnable',
          label: '启用日志',
          type: 'switch',
          default: true,
        },
        {
          key: 'xferlogFile',
          label: '传输日志路径',
          type: 'text',
          default: '/var/log/vsftpd.log',
          dependsOn: { key: 'logEnable', value: true },
        },
        {
          key: 'asciiUploadEnable',
          label: 'ASCII 上传模式',
          type: 'switch',
          default: false,
          tip: '允许 ASCII 模式上传',
        },
        {
          key: 'asciiDownloadEnable',
          label: 'ASCII 下载模式',
          type: 'switch',
          default: false,
          tip: '允许 ASCII 模式下载',
        },
        {
          key: 'ftpdBanner',
          label: '欢迎横幅',
          type: 'text',
          default: 'Welcome to FTP service',
          tip: '用户登录时显示的欢迎信息',
        },
      ],
    },
  ],
}

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

  // 基础配置
  lines.push(`# ======================== 基础配置 ========================`)
  lines.push(`listen=YES`)
  lines.push(`listen_port=${config.listenPort}`)
  lines.push(`anonymous_enable=${config.anonymousEnable ? 'YES' : 'NO'}`)
  lines.push(`local_enable=${config.localEnable ? 'YES' : 'NO'}`)
  lines.push(`write_enable=${config.writeEnable ? 'YES' : 'NO'}`)
  lines.push(`local_umask=${config.localUmask}`)
  lines.push(`dirmessage_enable=YES`)
  lines.push(`use_localtime=YES`)
  lines.push(`xferlog_enable=YES`)
  lines.push(`connect_from_port_20=YES`)
  lines.push(``)

  // 用户限制
  lines.push(`# ======================== 用户限制 ========================`)
  lines.push(`chroot_local_user=${config.chrootLocalUser ? 'YES' : 'NO'}`)
  if (config.chrootLocalUser) {
    lines.push(`allow_writeable_chroot=${config.allowWriteableChroot ? 'YES' : 'NO'}`)
  }
  lines.push(`max_clients=${config.maxClients}`)
  lines.push(`max_per_ip=${config.maxPerIp}`)
  lines.push(`idle_session_timeout=${config.idleSessionTimeout}`)
  lines.push(`data_connection_timeout=${config.dataConnectionTimeout}`)
  lines.push(``)

  // 被动模式
  lines.push(`# ======================== 被动模式 ========================`)
  lines.push(`pasv_enable=${config.pasvEnable ? 'YES' : 'NO'}`)
  if (config.pasvEnable) {
    lines.push(`pasv_min_port=${config.pasvMinPort}`)
    lines.push(`pasv_max_port=${config.pasvMaxPort}`)
  }
  lines.push(``)

  // TLS/SSL 安全
  lines.push(`# ======================== TLS/SSL 安全 ========================`)
  if (config.enableTls) {
    lines.push(`ssl_enable=YES`)
    lines.push(`rsa_cert_file=${config.rsaCertFile}`)
    lines.push(`rsa_private_key_file=${config.rsaPrivateKeyFile}`)
    lines.push(`ssl_tlsv1=${config.sslTlsv1 ? 'YES' : 'NO'}`)
    lines.push(`ssl_sslv2=NO`)
    lines.push(`ssl_sslv3=NO`)
    lines.push(`require_ssl_reuse=NO`)
    lines.push(`ssl_ciphers=HIGH`)
  } else {
    lines.push(`ssl_enable=NO`)
  }
  lines.push(``)

  // 用户列表与日志
  lines.push(`# ======================== 用户列表与日志 ========================`)
  lines.push(`userlist_enable=${config.userlistEnable ? 'YES' : 'NO'}`)
  if (config.userlistEnable) {
    lines.push(`userlist_deny=${config.userlistDeny ? 'YES' : 'NO'}`)
  }
  lines.push(`log_enable=${config.logEnable ? 'YES' : 'NO'}`)
  if (config.logEnable) {
    lines.push(`xferlog_file=${config.xferlogFile}`)
    lines.push(`xferlog_std_format=YES`)
  }
  lines.push(`ascii_upload_enable=${config.asciiUploadEnable ? 'YES' : 'NO'}`)
  lines.push(`ascii_download_enable=${config.asciiDownloadEnable ? 'YES' : 'NO'}`)
  lines.push(`ftpd_banner=${config.ftpdBanner}`)
  lines.push(`pam_service_name=vsftpd`)
  lines.push(`tcp_wrappers=YES`)

  return lines.join('\n')
}
